<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<html xmlns="http://www.w3.org/1999/xhtml" lang="en">

<head>
  <link href='https://fonts.googleapis.com/css?family=Inconsolata' rel='stylesheet' type='text/css' /><title>Change Streams &mdash; MongoDB Manual</title><link rel="shortcut icon" href="https://media.mongodb.org/favicon.ico" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="robots" content="index" />

  <meta name="release" content="4.2.5"/>
  <meta name="version" content="4.2"/>
  <meta name="DC.Source" content="https://github.com/mongodb/docs/blob/v4.2/source/changeStreams.txt"/>
  <meta property="og:image" content="http://s3.amazonaws.com/info-mongodb-com/_com_assets/cms/mongodb-for-giant-ideas-bbab5c3cf8.png">
  <meta property="og:image:secure_url" content="https://webassets.mongodb.com/_com_assets/cms/mongodb-for-giant-ideas-bbab5c3cf8.png">
      <link rel="canonical" href="https://docs.mongodb.com/manual/changeStreams" /><meta content="MongoDB triggers, change streams, database triggers, real time" name="description" />
<meta content="MongoDB triggers, change streams, database triggers, real time" name="keywords" />

  
   <link rel="stylesheet" href="_static/mongodb-docs.css" type="text/css" />
   <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
   <link rel="stylesheet" href="_static/css/navbar.min.css" type="text/css" />
    
    <script type="text/javascript" src="_static/lib/jquery.min.js"></script>
    <script type="text/javascript" src="_static/underscore.js"></script>
    <script type="text/javascript" src="_static/lib/bootstrap.js"></script>
    <script type="text/javascript" src="_static/lib/jquery.cookie.js"></script>
    <script type="text/javascript" src="_static/controller.js"></script>
      <link rel="search" type="application/opensearchdescription+xml" href="https://docs.mongodb.com/osd.xml" title="MongoDB Help"/>
<link rel="author" title="About these documents" href="about.html" />
<!-- <link rel="index" title="Index" href="genindex.html" /> -->
<link rel="search" title="Search" href="search.html" />
<link rel="top" title="MongoDB Manual" href="index.html" />
<link rel="next" title="Change Streams Production Recommendations" href="administration/change-streams-production-recommendations.html" />
<link rel="prev" title="Appendix C - OpenSSL Client Certificates for Testing" href="appendix/security/appendixC-openssl-client.html" /><script type='text/javascript'>
   var gptadslots=[];
   var googletag = googletag || {};
   googletag.cmd = googletag.cmd || [];
   (function(){ var gads = document.createElement('script');
      gads.async = true; gads.type = 'text/javascript';
      var useSSL = 'https:' == document.location.protocol;
      gads.src = (useSSL ? 'https:' : 'http:') + '//www.googletagservices.com/tag/js/gpt.js';
      var node = document.getElementsByTagName('script')[0];
      node.parentNode.insertBefore(gads, node);
   })();
</script>

<script type="text/javascript">
   googletag.cmd.push(function() {

      var pathname = location.href;
      
      if ( (pathname.indexOf("auth") >= 0) || (pathname.indexOf("security") >= 0) ) {
         gptadslots[1]= googletag.defineSlot('/40039723/docs.mongodb.org/security', [[160,600],[243,202],[293,244]],'mongodb-docs-1').addService(googletag.pubads());
      } else if ( (pathname.indexOf("crud") >= 0) ||  (pathname.indexOf("query") >= 0) || (pathname.indexOf("insert") >= 0) || (pathname.indexOf("update") >= 0) || (pathname.indexOf("remove") >= 0) || (pathname.indexOf("delete") >= 0) || (pathname.indexOf("aggregation") >= 0) ) {
         gptadslots[1]= googletag.defineSlot('/40039723/docs.mongodb.org/crud', [[160,600],[243,202],[293,244]],'mongodb-docs-1').addService(googletag.pubads());
      } else if (pathname.indexOf("shard") >= 0) {
         gptadslots[1]= googletag.defineSlot('/40039723/docs.mongodb.org/sharding', [[160,600],[243,202],[293,244]],'mongodb-docs-1').addService(googletag.pubads());
      } else if (pathname.indexOf("replica") >= 0) {
         gptadslots[1]= googletag.defineSlot('/40039723/docs.mongodb.org/replication', [[160,600],[243,202],[293,244]],'mongodb-docs-1').addService(googletag.pubads());
      } else if (pathname.indexOf("model") >= 0) {
         gptadslots[1]= googletag.defineSlot('/40039723/docs.mongodb.org/data-modeling', [[160,600],[243,202],[293,244]],'mongodb-docs-1').addService(googletag.pubads());
      } else if (pathname.indexOf("administration") >= 0) {
         gptadslots[1]= googletag.defineSlot('/40039723/docs.mongodb.org/support', [[160,600],[243,202],[293,244]],'mongodb-docs-1').addService(googletag.pubads());
      } else if (pathname.indexOf("install-mongodb-on-windows") >= 0) {
         gptadslots[1]= googletag.defineSlot('/40039723/docs.mongodb.org/install-mongodb-on-windows', [160, 600], 'mongodb-docs-1').addService(googletag.pubads());
      } else if (pathname.indexOf("tutorial/getting-started") >= 0) {
         gptadslots[1]= googletag.defineSlot('/40039723/docs.mongodb.org/docs_server_gettingstarted', [160, 600], 'mongodb-docs-1').addService(googletag.pubads());
      } else {
         //Adslot 1 declaration
         gptadslots[1]= googletag.defineSlot('/40039723/docs.mongodb.org', [[160,600],[243,202],[293,244]],'mongodb-docs-1').addService(googletag.pubads());
      }
      googletag.pubads().enableSingleRequest();
      googletag.pubads().enableAsyncRendering();
      googletag.enableServices();
   });
</script></head>
<body data-project="manual" data-project-title="MongoDB Manual" data-branch="v4.2" data-enable-marian=1>
  <!-- Google Tag Manager -->
  <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-JQHP"
                    height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
  <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push(
     {'gtm.start': new Date().getTime(),event:'gtm.js'}
   );var f=d.getElementsByTagName(s)[0],
   j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
   '//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
   })(window,document,'script','dataLayer','GTM-JQHP');</script>
  <!-- End Google Tag Manager -->
<div id="navbar" data-navprops='{"links": [{"url": "https://docs.mongodb.com/manual/","text": "Server","active": true},{"url": "https://docs.mongodb.com/ecosystem/drivers/","text": "Drivers"},{"url": "https://docs.mongodb.com/cloud/","text": "Cloud"},{"url": "https://docs.mongodb.com/tools/","text": "Tools"},{"url": "https://docs.mongodb.com/guides/","text": "Guides"}]}'></div>
      <script>
        window.googleSearchCx = "017213726194841070573:WMX6838984"
	window.googleSearchPlaceholder = "Search Documentation"
        window.googleSearchResultsUrl = "http://docs.mongodb.com/manual/search/"
      </script>
    <script src="_static/navbar.min.js"></script>
  

  <div class="content" >

   <div id="left-column">
         <aside id="sidebar" class="sidebar">
             
  <div class="sphinxsidebar" id="sphinxsidebar">
    <div id="sphinxsidebarwrapper" class="sphinxsidebarwrapper"><a href="javascript:void(0)" class="closeNav" id="closeNav">Close &times;</a>


<h3>
  <a class="index-link" href="index.html">MongoDB Manual</a>
</h3>


    <div class="btn-group version-sidebar">
      <button type="button" class="version-button dropdown-toggle" data-toggle="dropdown">
        
        
        Version 4.2 (current)<span class="caret"></span>
      </button>
      <ul class="dropdown-menu" role="menu">
        
          
          <li>
          
            <a class="version-selector" href="#" data-path="master">
              
              Version 4.4 (upcoming)
            </a>
          </li>
        
          
          <li class="active">
          
            <a href="#" data-path="manual">
              
              Version 4.2 (current)
            </a>
          </li>
        
          
          <li>
          
            <a class="version-selector" href="#" data-path="v4.0">
              
              Version 4.0
            </a>
          </li>
        
          
          <li>
          
            <a class="version-selector" href="#" data-path="v3.6">
              
              Version 3.6
            </a>
          </li>
        
          
          <li>
          
            <a class="version-selector" href="#" data-path="v3.4">
              
              Version 3.4
            </a>
          </li>
        
          
          <li>
          
            <a class="version-selector" href="#" data-path="v3.2">
              
              Version 3.2
            </a>
          </li>
        
          
          <li>
          
            <a class="version-selector" href="#" data-path="v3.0">
              
              Version 3.0
            </a>
          </li>
        
          
          <li>
          
            <a class="version-selector" href="#" data-path="v2.6">
              
              Version 2.6
            </a>
          </li>
        
          
          <li>
          
            <a class="version-selector" href="#" data-path="v2.4">
              
              Version 2.4
            </a>
          </li>
        
          
          <li>
          
            <a class="version-selector" href="#" data-path="v2.2">
              
              Version 2.2
            </a>
          </li>
        
      </ul>
    </div>


<ul class="current"><li class="toctree-l1"><a class="reference internal" href="introduction.html">Introduction</a><ul><li class="toctree-l2"><a class="reference internal" href="tutorial/getting-started.html">Getting Started</a></li><li class="toctree-l2"><a class="reference external" href="https://docs.atlas.mongodb.com/getting-started/">Create an Atlas Free Tier Cluster</a></li><li class="toctree-l2"><a class="reference internal" href="core/databases-and-collections.html">Databases and Collections</a><ul><li class="toctree-l3"><a class="reference internal" href="core/views.html">Views</a></li><li class="toctree-l3"><a class="reference internal" href="core/materialized-views.html">On-Demand Materialized Views</a></li><li class="toctree-l3"><a class="reference internal" href="core/capped-collections.html">Capped Collections</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="core/document.html">Documents</a></li><li class="toctree-l2"><a class="reference internal" href="reference/bson-types.html">BSON Types</a><ul><li class="toctree-l3"><a class="reference internal" href="reference/bson-type-comparison-order.html">Comparison/Sort Order</a></li><li class="toctree-l3"><a class="reference internal" href="reference/mongodb-extended-json.html">MongoDB Extended JSON (v2)</a></li><li class="toctree-l3"><a class="reference internal" href="reference/mongodb-extended-json-v1.html">MongoDB Extended JSON (v1)</a></li></ul></li></ul></li><li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a><ul><li class="toctree-l2"><a class="reference internal" href="administration/install-community.html">Install MongoDB Community Edition</a><ul><li class="toctree-l3"><a class="reference internal" href="administration/install-on-linux.html">Install on Linux</a><ul><li class="toctree-l4"><a class="reference internal" href="tutorial/install-mongodb-on-red-hat.html">Install on Red Hat</a><ul><li class="toctree-l5"><a class="reference internal" href="tutorial/install-mongodb-on-red-hat-tarball.html">Install using .tgz Tarball</a></li></ul></li><li class="toctree-l4"><a class="reference internal" href="tutorial/install-mongodb-on-ubuntu.html">Install on Ubuntu</a><ul><li class="toctree-l5"><a class="reference internal" href="tutorial/install-mongodb-on-ubuntu-tarball.html">Install using .tgz Tarball</a></li><li class="toctree-l5"><a class="reference internal" href="reference/installation-ubuntu-community-troubleshooting.html">Troubleshoot Ubuntu Installation</a></li></ul></li><li class="toctree-l4"><a class="reference internal" href="tutorial/install-mongodb-on-debian.html">Install on Debian</a><ul><li class="toctree-l5"><a class="reference internal" href="tutorial/install-mongodb-on-debian-tarball.html">Install using .tgz Tarball</a></li></ul></li><li class="toctree-l4"><a class="reference internal" href="tutorial/install-mongodb-on-suse.html">Install on SUSE</a><ul><li class="toctree-l5"><a class="reference internal" href="tutorial/install-mongodb-on-suse-tarball.html">Install using .tgz Tarball</a></li></ul></li><li class="toctree-l4"><a class="reference internal" href="tutorial/install-mongodb-on-amazon.html">Install on Amazon</a><ul><li class="toctree-l5"><a class="reference internal" href="tutorial/install-mongodb-on-amazon-tarball.html">Install using .tgz Tarball</a></li></ul></li></ul></li><li class="toctree-l3"><a class="reference internal" href="tutorial/install-mongodb-on-os-x.html">Install on macOS</a><ul><li class="toctree-l4"><a class="reference internal" href="tutorial/install-mongodb-on-os-x-tarball.html">Install using .tgz Tarball</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="tutorial/install-mongodb-on-windows.html">Install on Windows</a><ul><li class="toctree-l4"><a class="reference internal" href="tutorial/install-mongodb-on-windows-unattended.html">Install using msiexec.exe</a></li></ul></li></ul></li><li class="toctree-l2"><a class="reference internal" href="administration/install-enterprise.html">Install MongoDB Enterprise</a><ul><li class="toctree-l3"><a class="reference internal" href="administration/install-enterprise-linux.html">Install on Linux</a><ul><li class="toctree-l4"><a class="reference internal" href="tutorial/install-mongodb-enterprise-on-red-hat.html">Install on Red Hat</a><ul><li class="toctree-l5"><a class="reference internal" href="tutorial/install-mongodb-enterprise-on-red-hat-tarball.html">Install using .tgz Tarball</a></li></ul></li><li class="toctree-l4"><a class="reference internal" href="tutorial/install-mongodb-enterprise-on-ubuntu.html">Install on Ubuntu</a><ul><li class="toctree-l5"><a class="reference internal" href="tutorial/install-mongodb-enterprise-on-ubuntu-tarball.html">Install using .tgz Tarball</a></li></ul></li><li class="toctree-l4"><a class="reference internal" href="tutorial/install-mongodb-enterprise-on-debian.html">Install on Debian</a><ul><li class="toctree-l5"><a class="reference internal" href="tutorial/install-mongodb-enterprise-on-debian-tarball.html">Install using .tgz Tarball</a></li></ul></li><li class="toctree-l4"><a class="reference internal" href="tutorial/install-mongodb-enterprise-on-suse.html">Install on SUSE</a><ul><li class="toctree-l5"><a class="reference internal" href="tutorial/install-mongodb-enterprise-on-suse-tarball.html">Install using .tgz Tarball</a></li></ul></li><li class="toctree-l4"><a class="reference internal" href="tutorial/install-mongodb-enterprise-on-amazon.html">Install on Amazon</a><ul><li class="toctree-l5"><a class="reference internal" href="tutorial/install-mongodb-enterprise-on-amazon-tarball.html">Install using .tgz Tarball</a></li></ul></li></ul></li><li class="toctree-l3"><a class="reference internal" href="tutorial/install-mongodb-enterprise-on-os-x.html">Install on macOS</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/install-mongodb-enterprise-on-windows.html">Install on Windows</a><ul><li class="toctree-l4"><a class="reference internal" href="tutorial/install-mongodb-enterprise-on-windows-unattended.html">Install using msiexec.exe</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="tutorial/install-mongodb-enterprise-with-docker.html">Install with Docker</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="administration/upgrade-community-to-enterprise.html">Upgrade MongoDB Community to MongoDB Enterprise</a><ul><li class="toctree-l3"><a class="reference internal" href="tutorial/upgrade-to-enterprise-standalone.html">Upgrade to MongoDB Enterprise (Standalone)</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/upgrade-to-enterprise-replica-set.html">Upgrade to MongoDB Enterprise (Replica Set)</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/upgrade-to-enterprise-sharded-cluster.html">Upgrade to MongoDB Enterprise (Sharded Cluster)</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="tutorial/verify-mongodb-packages.html">Verify Integrity of MongoDB Packages</a></li></ul></li><li class="toctree-l1"><a class="reference internal" href="mongo.html">The <code class="docutils literal"><span class="pre">mongo</span></code> Shell</a><ul><li class="toctree-l2"><a class="reference internal" href="tutorial/configure-mongo-shell.html">Configure the <code class="docutils literal"><span class="pre">mongo</span></code> Shell</a></li><li class="toctree-l2"><a class="reference internal" href="tutorial/access-mongo-shell-help.html">Access the <code class="docutils literal"><span class="pre">mongo</span></code> Shell Help</a></li><li class="toctree-l2"><a class="reference internal" href="tutorial/write-scripts-for-the-mongo-shell.html">Write Scripts for the <code class="docutils literal"><span class="pre">mongo</span></code> Shell</a></li><li class="toctree-l2"><a class="reference internal" href="core/shell-types.html">Data Types in the <code class="docutils literal"><span class="pre">mongo</span></code> Shell</a></li><li class="toctree-l2"><a class="reference internal" href="reference/mongo-shell.html"><code class="docutils literal"><span class="pre">mongo</span></code> Shell Quick Reference</a></li></ul></li><li class="toctree-l1"><a class="reference internal" href="crud.html">MongoDB CRUD Operations</a><ul><li class="toctree-l2"><a class="reference internal" href="tutorial/insert-documents.html">Insert Documents</a><ul><li class="toctree-l3"><a class="reference internal" href="reference/insert-methods.html">Insert Methods</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="tutorial/query-documents.html">Query Documents</a><ul><li class="toctree-l3"><a class="reference internal" href="tutorial/query-embedded-documents.html">Query on Embedded/Nested Documents</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/query-arrays.html">Query an Array</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/query-array-of-documents.html">Query an Array of Embedded Documents</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/project-fields-from-query-results.html">Project Fields to Return from Query</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/query-for-null-fields.html">Query for Null or Missing Fields</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/iterate-a-cursor.html">Iterate a Cursor in the <code class="docutils literal"><span class="pre">mongo</span></code> Shell</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="tutorial/update-documents.html">Update Documents</a><ul><li class="toctree-l3"><a class="reference internal" href="tutorial/update-documents-with-aggregation-pipeline.html">Updates with Aggregation Pipeline</a></li><li class="toctree-l3"><a class="reference internal" href="reference/update-methods.html">Update Methods</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="tutorial/remove-documents.html">Delete Documents</a><ul><li class="toctree-l3"><a class="reference internal" href="reference/delete-methods.html">Delete Methods</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="core/bulk-write-operations.html">Bulk Write Operations</a></li><li class="toctree-l2"><a class="reference internal" href="core/retryable-writes.html">Retryable Writes</a></li><li class="toctree-l2"><a class="reference internal" href="reference/sql-comparison.html">SQL to MongoDB Mapping Chart</a></li><li class="toctree-l2"><a class="reference internal" href="text-search.html">Text Search</a><ul><li class="toctree-l3"><a class="reference internal" href="core/link-text-indexes.html">Text Indexes</a></li><li class="toctree-l3"><a class="reference internal" href="core/text-search-operators.html">Text Search Operators</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/text-search-in-aggregation.html">Text Search in the Aggregation Pipeline</a></li><li class="toctree-l3"><a class="reference internal" href="reference/text-search-languages.html">Text Search Languages</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="geospatial-queries.html">Geospatial Queries</a><ul><li class="toctree-l3"><a class="reference internal" href="tutorial/geospatial-tutorial.html">Find Restaurants with Geospatial Queries</a></li><li class="toctree-l3"><a class="reference internal" href="reference/geojson.html">GeoJSON Objects</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="reference/read-concern.html">Read Isolation (Read Concern)</a><ul><li class="toctree-l3"><a class="reference internal" href="reference/read-concern-local.html">Read Concern <code class="docutils literal"><span class="pre">&quot;local&quot;</span></code></a></li><li class="toctree-l3"><a class="reference internal" href="reference/read-concern-available.html">Read Concern <code class="docutils literal"><span class="pre">&quot;available&quot;</span></code></a></li><li class="toctree-l3"><a class="reference internal" href="reference/read-concern-majority.html">Read Concern <code class="docutils literal"><span class="pre">&quot;majority&quot;</span></code></a></li><li class="toctree-l3"><a class="reference internal" href="reference/read-concern-linearizable.html">Read Concern <code class="docutils literal"><span class="pre">&quot;linearizable&quot;</span></code></a></li><li class="toctree-l3"><a class="reference internal" href="reference/read-concern-snapshot.html">Read Concern <code class="docutils literal"><span class="pre">&quot;snapshot&quot;</span></code></a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="reference/write-concern.html">Write Acknowledgement (Write Concern)</a></li><li class="toctree-l2"><a class="reference internal" href="core/crud.html">MongoDB CRUD Concepts</a><ul><li class="toctree-l3"><a class="reference internal" href="core/write-operations-atomicity.html">Atomicity and Transactions</a></li><li class="toctree-l3"><a class="reference internal" href="core/read-isolation-consistency-recency.html">Read Isolation, Consistency, and Recency</a><ul><li class="toctree-l4"><a class="reference internal" href="core/causal-consistency-read-write-concerns.html">Causal Consistency and Read and Write Concerns</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="core/distributed-queries.html">Distributed Queries</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/perform-findAndModify-linearizable-reads.html">Linearizable Reads via <code class="docutils literal"><span class="pre">findAndModify</span></code></a></li><li class="toctree-l3"><a class="reference internal" href="core/query-plans.html">Query Plans</a></li><li class="toctree-l3"><a class="reference internal" href="core/query-optimization.html">Query Optimization</a><ul><li class="toctree-l4"><a class="reference internal" href="tutorial/evaluate-operation-performance.html">Evaluate Performance of Current Operations</a></li><li class="toctree-l4"><a class="reference internal" href="tutorial/optimize-query-performance-with-indexes-and-projections.html">Optimize Query Performance</a></li><li class="toctree-l4"><a class="reference internal" href="core/write-performance.html">Write Operation Performance</a></li><li class="toctree-l4"><a class="reference internal" href="reference/explain-results.html">Explain Results</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="tutorial/analyze-query-plan.html">Analyze Query Performance</a></li><li class="toctree-l3"><a class="reference internal" href="core/tailable-cursors.html">Tailable Cursors</a></li></ul></li></ul></li><li class="toctree-l1"><a class="reference internal" href="aggregation.html">Aggregation</a><ul><li class="toctree-l2"><a class="reference internal" href="core/aggregation-pipeline.html">Aggregation Pipeline</a><ul><li class="toctree-l3"><a class="reference internal" href="core/aggregation-pipeline-optimization.html">Aggregation Pipeline Optimization</a></li><li class="toctree-l3"><a class="reference internal" href="core/aggregation-pipeline-limits.html">Aggregation Pipeline Limits</a></li><li class="toctree-l3"><a class="reference internal" href="core/aggregation-pipeline-sharded-collections.html">Aggregation Pipeline and Sharded Collections</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/aggregation-zip-code-data-set.html">Example with ZIP Code Data</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/aggregation-with-user-preference-data.html">Example with User Preference Data</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="core/map-reduce.html">Map-Reduce</a><ul><li class="toctree-l3"><a class="reference internal" href="core/map-reduce-sharded-collections.html">Map-Reduce and Sharded Collections</a></li><li class="toctree-l3"><a class="reference internal" href="core/map-reduce-concurrency.html">Map-Reduce Concurrency</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/map-reduce-examples.html">Map-Reduce Examples</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/perform-incremental-map-reduce.html">Perform Incremental Map-Reduce</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/troubleshoot-map-function.html">Troubleshoot the Map Function</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/troubleshoot-reduce-function.html">Troubleshoot the Reduce Function</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="reference/aggregation.html">Aggregation Reference</a><ul><li class="toctree-l3"><a class="reference internal" href="meta/aggregation-quick-reference.html">Aggregation Pipeline Quick Reference</a></li><li class="toctree-l3"><a class="reference internal" href="reference/operator/aggregation/interface.html">Aggregation Commands</a></li><li class="toctree-l3"><a class="reference internal" href="reference/aggregation-commands-comparison.html">Aggregation Commands Comparison</a></li><li class="toctree-l3"><a class="reference internal" href="reference/aggregation-variables.html">Variables in Aggregation Expressions</a></li><li class="toctree-l3"><a class="reference internal" href="reference/sql-aggregation-comparison.html">SQL to Aggregation Mapping Chart</a></li></ul></li></ul></li><li class="toctree-l1"><a class="reference internal" href="data-modeling.html">Data Models</a><ul><li class="toctree-l2"><a class="reference internal" href="core/data-modeling-introduction.html">Data Modeling Introduction</a></li><li class="toctree-l2"><a class="reference internal" href="core/schema-validation.html">Schema Validation</a></li><li class="toctree-l2"><a class="reference internal" href="core/data-models.html">Data Modeling Concepts</a><ul><li class="toctree-l3"><a class="reference internal" href="core/data-model-design.html">Data Model Design</a></li><li class="toctree-l3"><a class="reference internal" href="core/data-model-operations.html">Operational Factors and Data Models</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="applications/data-models.html">Data Model Examples and Patterns</a><ul><li class="toctree-l3"><a class="reference internal" href="applications/data-models-relationships.html">Model Relationships Between Documents</a><ul><li class="toctree-l4"><a class="reference internal" href="tutorial/model-embedded-one-to-one-relationships-between-documents.html">Model One-to-One Relationships with Embedded Documents</a></li><li class="toctree-l4"><a class="reference internal" href="tutorial/model-embedded-one-to-many-relationships-between-documents.html">Model One-to-Many Relationships with Embedded Documents</a></li><li class="toctree-l4"><a class="reference internal" href="tutorial/model-referenced-one-to-many-relationships-between-documents.html">Model One-to-Many Relationships with Document References</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="applications/data-models-tree-structures.html">Model Tree Structures</a><ul><li class="toctree-l4"><a class="reference internal" href="tutorial/model-tree-structures-with-parent-references.html">Model Tree Structures with Parent References</a></li><li class="toctree-l4"><a class="reference internal" href="tutorial/model-tree-structures-with-child-references.html">Model Tree Structures with Child References</a></li><li class="toctree-l4"><a class="reference internal" href="tutorial/model-tree-structures-with-ancestors-array.html">Model Tree Structures with an Array of Ancestors</a></li><li class="toctree-l4"><a class="reference internal" href="tutorial/model-tree-structures-with-materialized-paths.html">Model Tree Structures with Materialized Paths</a></li><li class="toctree-l4"><a class="reference internal" href="tutorial/model-tree-structures-with-nested-sets.html">Model Tree Structures with Nested Sets</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="applications/data-models-applications.html">Model Specific Application Contexts</a><ul><li class="toctree-l4"><a class="reference internal" href="tutorial/model-data-for-atomic-operations.html">Model Data for Atomic Operations</a></li><li class="toctree-l4"><a class="reference internal" href="tutorial/model-data-for-keyword-search.html">Model Data to Support Keyword Search</a></li><li class="toctree-l4"><a class="reference internal" href="tutorial/model-data-for-schema-versioning.html">Model Data for Schema Versioning</a></li><li class="toctree-l4"><a class="reference internal" href="tutorial/model-monetary-data.html">Model Monetary Data</a></li><li class="toctree-l4"><a class="reference internal" href="tutorial/model-time-data.html">Model Time Data</a></li><li class="toctree-l4"><a class="reference internal" href="tutorial/model-computed-data.html">Model Computed Data</a></li></ul></li></ul></li><li class="toctree-l2"><a class="reference internal" href="reference/data-models.html">Data Model Reference</a><ul><li class="toctree-l3"><a class="reference internal" href="reference/database-references.html">Database References</a></li></ul></li></ul></li><li class="toctree-l1"><a class="reference internal" href="core/transactions.html">Transactions</a><ul><li class="toctree-l2"><a class="reference internal" href="core/transactions-in-applications.html">Drivers API</a></li><li class="toctree-l2"><a class="reference internal" href="core/transactions-production-consideration.html">Production Considerations</a></li><li class="toctree-l2"><a class="reference internal" href="core/transactions-sharded-clusters.html">Production Considerations (Sharded Clusters)</a></li><li class="toctree-l2"><a class="reference internal" href="core/transactions-operations.html">Transactions and Operations</a></li></ul></li><li class="toctree-l1"><a class="reference internal" href="indexes.html">Indexes</a><ul><li class="toctree-l2"><a class="reference internal" href="core/index-single.html">Single Field Indexes</a></li><li class="toctree-l2"><a class="reference internal" href="core/index-compound.html">Compound Indexes</a></li><li class="toctree-l2"><a class="reference internal" href="core/index-multikey.html">Multikey Indexes</a><ul><li class="toctree-l3"><a class="reference internal" href="core/multikey-index-bounds.html">Multikey Index Bounds</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="core/index-text.html">Text Indexes</a><ul><li class="toctree-l3"><a class="reference internal" href="tutorial/specify-language-for-text-index.html">Specify a Language for Text Index</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/avoid-text-index-name-limit.html">Specify Name for <code class="docutils literal"><span class="pre">text</span></code> Index</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/control-results-of-text-search.html">Control Search Results with Weights</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/limit-number-of-items-scanned-for-text-search.html">Limit the Number of Entries Scanned</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="core/index-wildcard.html">Wildcard Indexes</a><ul><li class="toctree-l3"><a class="reference internal" href="reference/index-wildcard-restrictions.html">Wildcard Index Restrictions</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="core/2dsphere.html"><code class="docutils literal"><span class="pre">2dsphere</span></code> Indexes</a><ul><li class="toctree-l3"><a class="reference internal" href="tutorial/query-a-2dsphere-index.html">Query a <code class="docutils literal"><span class="pre">2dsphere</span></code> Index</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="core/2d.html"><code class="docutils literal"><span class="pre">2d</span></code> Indexes</a><ul><li class="toctree-l3"><a class="reference internal" href="tutorial/build-a-2d-index.html">Create a <code class="docutils literal"><span class="pre">2d</span></code> Index</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/query-a-2d-index.html">Query a <code class="docutils literal"><span class="pre">2d</span></code> Index</a></li><li class="toctree-l3"><a class="reference internal" href="core/geospatial-indexes.html"><code class="docutils literal"><span class="pre">2d</span></code> Index Internals</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/calculate-distances-using-spherical-geometry-with-2d-geospatial-indexes.html">Calculate Distance Using Spherical Geometry</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="core/geohaystack.html"><code class="docutils literal"><span class="pre">geoHaystack</span></code> Indexes</a><ul><li class="toctree-l3"><a class="reference internal" href="tutorial/build-a-geohaystack-index.html">Create a Haystack Index</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/query-a-geohaystack-index.html">Query a Haystack Index</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="core/index-hashed.html">Hashed Indexes</a></li><li class="toctree-l2"><a class="reference internal" href="core/index-properties.html">Index Properties</a><ul><li class="toctree-l3"><a class="reference internal" href="core/index-ttl.html">TTL Indexes</a><ul><li class="toctree-l4"><a class="reference internal" href="tutorial/expire-data.html">Expire Data from Collections by Setting TTL</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="core/index-unique.html">Unique Indexes</a></li><li class="toctree-l3"><a class="reference internal" href="core/index-partial.html">Partial Indexes</a></li><li class="toctree-l3"><a class="reference internal" href="core/index-case-insensitive.html">Case Insensitive Indexes</a></li><li class="toctree-l3"><a class="reference internal" href="core/index-sparse.html">Sparse Indexes</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="core/index-creation.html">Index Builds on Populated Collections</a><ul><li class="toctree-l3"><a class="reference internal" href="tutorial/build-indexes-on-replica-sets.html">Build Indexes on Replica Sets</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/build-indexes-on-sharded-clusters.html">Build Indexes on Sharded Clusters</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="core/index-intersection.html">Index Intersection</a></li><li class="toctree-l2"><a class="reference internal" href="tutorial/manage-indexes.html">Manage Indexes</a></li><li class="toctree-l2"><a class="reference internal" href="tutorial/measure-index-use.html">Measure Index Use</a></li><li class="toctree-l2"><a class="reference internal" href="applications/indexes.html">Indexing Strategies</a><ul><li class="toctree-l3"><a class="reference internal" href="tutorial/create-indexes-to-support-queries.html">Create Indexes to Support Your Queries</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/sort-results-with-indexes.html">Use Indexes to Sort Query Results</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/ensure-indexes-fit-ram.html">Ensure Indexes Fit in RAM</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/create-queries-that-ensure-selectivity.html">Create Queries that Ensure Selectivity</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="reference/indexes.html">Indexing Reference</a></li></ul></li><li class="toctree-l1"><a class="reference internal" href="security.html">Security</a><ul><li class="toctree-l2"><a class="reference internal" href="administration/security-checklist.html">Security Checklist</a></li><li class="toctree-l2"><a class="reference internal" href="tutorial/enable-authentication.html">Enable Access Control</a></li><li class="toctree-l2"><a class="reference internal" href="core/authentication.html">Authentication</a><ul><li class="toctree-l3"><a class="reference internal" href="core/security-users.html">Users</a><ul><li class="toctree-l4"><a class="reference internal" href="tutorial/create-users.html">Add Users</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="core/authentication-mechanisms.html">Authentication Mechanisms</a><ul><li class="toctree-l4"><a class="reference internal" href="core/security-scram.html">SCRAM</a></li><li class="toctree-l4"><a class="reference internal" href="core/security-x.509.html">x.509</a><ul><li class="toctree-l5"><a class="reference internal" href="tutorial/configure-x509-client-authentication.html">Use x.509 Certificates to Authenticate Clients</a></li></ul></li></ul></li><li class="toctree-l3"><a class="reference internal" href="core/authentication-mechanisms-enterprise.html">Enterprise Authentication Mechanisms</a><ul><li class="toctree-l4"><a class="reference internal" href="core/kerberos.html">Kerberos Authentication</a><ul><li class="toctree-l5"><a class="reference internal" href="tutorial/control-access-to-mongodb-with-kerberos-authentication.html">Configure MongoDB with Kerberos Authentication on Linux</a></li><li class="toctree-l5"><a class="reference internal" href="tutorial/control-access-to-mongodb-windows-with-kerberos-authentication.html">Configure MongoDB with Kerberos Authentication on Windows</a></li><li class="toctree-l5"><a class="reference internal" href="tutorial/troubleshoot-kerberos.html">Troubleshoot Kerberos Authentication</a></li><li class="toctree-l5"><a class="reference internal" href="tutorial/kerberos-auth-activedirectory-authz.html">Configure MongoDB with Kerberos Authentication and Active Directory Authorization</a></li></ul></li><li class="toctree-l4"><a class="reference internal" href="core/security-ldap.html">LDAP Proxy Authentication</a><ul><li class="toctree-l5"><a class="reference internal" href="tutorial/configure-ldap-sasl-activedirectory.html">Authenticate Using SASL and LDAP with ActiveDirectory</a></li><li class="toctree-l5"><a class="reference internal" href="tutorial/configure-ldap-sasl-openldap.html">Authenticate Using SASL and LDAP with OpenLDAP</a></li><li class="toctree-l5"><a class="reference internal" href="tutorial/authenticate-nativeldap-activedirectory.html">Authenticate and Authorize Users Using Active Directory via Native LDAP</a></li></ul></li><li class="toctree-l4"><a class="reference internal" href="core/security-ldap-external.html">LDAP Authorization</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="core/security-internal-authentication.html">Internal/Membership Authentication</a><ul><li class="toctree-l4"><a class="reference internal" href="tutorial/deploy-replica-set-with-keyfile-access-control.html">Deploy Replica Set With Keyfile Authentication</a></li><li class="toctree-l4"><a class="reference internal" href="tutorial/enforce-keyfile-access-control-in-existing-replica-set.html">Update Replica Set to Keyfile Authentication</a></li><li class="toctree-l4"><a class="reference internal" href="tutorial/enforce-keyfile-access-control-in-existing-replica-set-without-downtime.html">Update Replica Set to Keyfile Authentication (No Downtime)</a></li><li class="toctree-l4"><a class="reference internal" href="tutorial/rotate-key-replica-set.html">Rotate Keys for Replica Sets</a></li><li class="toctree-l4"><a class="reference internal" href="tutorial/deploy-sharded-cluster-with-keyfile-access-control.html">Deploy Sharded Cluster with Keyfile Authentication</a></li><li class="toctree-l4"><a class="reference internal" href="tutorial/enforce-keyfile-access-control-in-existing-sharded-cluster.html">Update Sharded Cluster to Keyfile Authentication</a></li><li class="toctree-l4"><a class="reference internal" href="tutorial/enforce-keyfile-access-control-in-existing-sharded-cluster-no-downtime.html">Update Sharded Cluster to Keyfile Authentication (No Downtime)</a></li><li class="toctree-l4"><a class="reference internal" href="tutorial/rotate-key-sharded-cluster.html">Rotate Keys for Sharded Clusters</a></li><li class="toctree-l4"><a class="reference internal" href="tutorial/configure-x509-member-authentication.html">Use x.509 Certificate for Membership Authentication</a></li><li class="toctree-l4"><a class="reference internal" href="tutorial/upgrade-keyfile-to-x509.html">Upgrade from Keyfile Authentication to x.509 Authentication</a></li><li class="toctree-l4"><a class="reference internal" href="tutorial/rotate-x509-membership-certificates.html">Rolling Update of x.509 Cluster Certificates that Contain New DN</a></li></ul></li></ul></li><li class="toctree-l2"><a class="reference internal" href="core/authorization.html">Role-Based Access Control</a><ul><li class="toctree-l3"><a class="reference internal" href="reference/built-in-roles.html">Built-In Roles</a></li><li class="toctree-l3"><a class="reference internal" href="core/security-user-defined-roles.html">User-Defined Roles</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/manage-users-and-roles.html">Manage Users and Roles</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/change-own-password-and-custom-data.html">Change Your Password and Custom Data</a></li><li class="toctree-l3"><a class="reference internal" href="core/collection-level-access-control.html">Collection-Level Access Control</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="core/security-transport-encryption.html">TLS/SSL (Transport Encryption)</a><ul><li class="toctree-l3"><a class="reference internal" href="tutorial/configure-ssl.html">Configure <code class="docutils literal"><span class="pre">mongod</span></code> and <code class="docutils literal"><span class="pre">mongos</span></code> for TLS/SSL</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/configure-ssl-clients.html">TLS/SSL Configuration for Clients</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/upgrade-cluster-to-ssl.html">Upgrade a Cluster to Use TLS/SSL</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/configure-fips.html">Configure MongoDB for FIPS</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="core/security-encryption-at-rest.html">Encryption at Rest</a><ul><li class="toctree-l3"><a class="reference internal" href="tutorial/configure-encryption.html">Configure Encryption</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/rotate-encryption-key.html">Rotate Encryption Keys</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="core/security-client-side-encryption.html">Client-Side Field Level Encryption</a><ul><li class="toctree-l3"><a class="reference internal" href="core/security-automatic-client-side-encryption.html">Automatic Client-Side Field Level Encryption</a><ul><li class="toctree-l4"><a class="reference internal" href="reference/security-client-side-automatic-json-schema.html">Automatic Encryption Rules</a></li><li class="toctree-l4"><a class="reference internal" href="reference/security-client-side-query-aggregation-support.html">Read/Write Support with Automatic Field Level Encryption</a></li><li class="toctree-l4"><a class="reference internal" href="reference/security-client-side-encryption-appendix.html">Appendix</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="core/security-explicit-client-side-encryption.html">Explicit (Manual) Client-Side Field Level Encryption</a></li><li class="toctree-l3"><a class="reference internal" href="core/security-client-side-encryption-key-management.html">Master Key and Data Encryption Key Management</a><ul><li class="toctree-l4"><a class="reference internal" href="tutorial/manage-client-side-encryption-data-keys.html">Manage Data Encryption Keys</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="reference/security-client-side-encryption-limitations.html">Limitations</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="core/auditing.html">Auditing</a><ul><li class="toctree-l3"><a class="reference internal" href="tutorial/configure-auditing.html">Configure Auditing</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/configure-audit-filters.html">Configure Audit Filters</a></li><li class="toctree-l3"><a class="reference internal" href="reference/audit-message.html">System Event Audit Messages</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="core/security-hardening.html">Network and Configuration Hardening</a><ul><li class="toctree-l3"><a class="reference internal" href="core/security-mongodb-configuration.html">IP Binding</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/configure-linux-iptables-firewall.html">Configure Linux <code class="docutils literal"><span class="pre">iptables</span></code> Firewall for MongoDB</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/configure-windows-netsh-firewall.html">Configure Windows <code class="docutils literal"><span class="pre">netsh</span></code> Firewall for MongoDB</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="tutorial/implement-field-level-redaction.html">Implement Field Level Redaction</a></li><li class="toctree-l2"><a class="reference internal" href="reference/security.html">Security Reference</a><ul><li class="toctree-l3"><a class="reference internal" href="reference/system-roles-collection.html"><code class="docutils literal"><span class="pre">system.roles</span></code> Collection</a></li><li class="toctree-l3"><a class="reference internal" href="reference/system-users-collection.html"><code class="docutils literal"><span class="pre">system.users</span></code> Collection</a></li><li class="toctree-l3"><a class="reference internal" href="reference/resource-document.html">Resource Document</a></li><li class="toctree-l3"><a class="reference internal" href="reference/privilege-actions.html">Privilege Actions</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="tutorial/create-a-vulnerability-report.html">Create a Vulnerability Report</a></li><li class="toctree-l2"><a class="reference internal" href="appendix/security.html">Appendix</a><ul><li class="toctree-l3"><a class="reference internal" href="appendix/security/appendixA-openssl-ca.html">Appendix A - OpenSSL CA Certificate for Testing</a></li><li class="toctree-l3"><a class="reference internal" href="appendix/security/appendixB-openssl-server.html">Appendix B - OpenSSL Server Certificates for Testing</a></li><li class="toctree-l3"><a class="reference internal" href="appendix/security/appendixC-openssl-client.html">Appendix C - OpenSSL Client Certificates for Testing</a></li></ul></li></ul></li><li class="toctree-l1 current"><a class="reference internal current" href="">Change Streams</a><ul><li class="toctree-l2"><a class="reference internal" href="administration/change-streams-production-recommendations.html">Change Streams Production Recommendations</a></li><li class="toctree-l2"><a class="reference internal" href="reference/change-events.html">Change Events</a></li></ul></li><li class="toctree-l1"><a class="reference internal" href="replication.html">Replication</a><ul><li class="toctree-l2"><a class="reference internal" href="core/replica-set-members.html">Replica Set Members</a><ul><li class="toctree-l3"><a class="reference internal" href="core/replica-set-primary.html">Replica Set Primary</a></li><li class="toctree-l3"><a class="reference internal" href="core/replica-set-secondary.html">Replica Set Secondary Members</a><ul><li class="toctree-l4"><a class="reference internal" href="core/replica-set-priority-0-member.html">Priority 0 Replica Set Members</a></li><li class="toctree-l4"><a class="reference internal" href="core/replica-set-hidden-member.html">Hidden Replica Set Members</a></li><li class="toctree-l4"><a class="reference internal" href="core/replica-set-delayed-member.html">Delayed Replica Set Members</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="core/replica-set-arbiter.html">Replica Set Arbiter</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="core/replica-set-oplog.html">Replica Set Oplog</a></li><li class="toctree-l2"><a class="reference internal" href="core/replica-set-sync.html">Replica Set Data Synchronization</a></li><li class="toctree-l2"><a class="reference internal" href="core/replica-set-architectures.html">Replica Set Deployment Architectures</a><ul><li class="toctree-l3"><a class="reference internal" href="core/replica-set-architecture-three-members.html">Three Member Replica Sets</a></li><li class="toctree-l3"><a class="reference internal" href="core/replica-set-architecture-geographically-distributed.html">Replica Sets Distributed Across Two or More Data Centers</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="core/replica-set-high-availability.html">Replica Set High Availability</a><ul><li class="toctree-l3"><a class="reference internal" href="core/replica-set-elections.html">Replica Set Elections</a></li><li class="toctree-l3"><a class="reference internal" href="core/replica-set-rollbacks.html">Rollbacks During Replica Set Failover</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="applications/replication.html">Replica Set Read and Write Semantics</a><ul><li class="toctree-l3"><a class="reference internal" href="core/replica-set-write-concern.html">Write Concern for Replica Sets</a></li><li class="toctree-l3"><a class="reference internal" href="core/read-preference.html">Read Preference</a><ul><li class="toctree-l4"><a class="reference internal" href="core/read-preference-tags.html">Tag Sets</a></li><li class="toctree-l4"><a class="reference internal" href="core/read-preference-staleness.html">maxStalenessSeconds</a></li><li class="toctree-l4"><a class="reference internal" href="core/read-preference-use-cases.html">Read Preference Use Cases</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="core/read-preference-mechanics.html">Server Selection Algorithm</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="administration/replica-set-deployment.html">Replica Set Deployment Tutorials</a><ul><li class="toctree-l3"><a class="reference internal" href="tutorial/deploy-replica-set.html">Deploy a Replica Set</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/deploy-replica-set-for-testing.html">Deploy a Replica Set for Testing and Development</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/deploy-geographically-distributed-replica-set.html">Deploy a Geographically Redundant Replica Set</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/add-replica-set-arbiter.html">Add an Arbiter to Replica Set</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/convert-standalone-to-replica-set.html">Convert a Standalone to a Replica Set</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/expand-replica-set.html">Add Members to a Replica Set</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/remove-replica-set-member.html">Remove Members from Replica Set</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/replace-replica-set-member.html">Replace a Replica Set Member</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="administration/replica-set-member-configuration.html">Member Configuration Tutorials</a><ul><li class="toctree-l3"><a class="reference internal" href="tutorial/adjust-replica-set-member-priority.html">Adjust Priority for Replica Set Member</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/configure-secondary-only-replica-set-member.html">Prevent Secondary from Becoming Primary</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/configure-a-hidden-replica-set-member.html">Configure a Hidden Replica Set Member</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/configure-a-delayed-replica-set-member.html">Configure a Delayed Replica Set Member</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/configure-a-non-voting-replica-set-member.html">Configure Non-Voting Replica Set Member</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/convert-secondary-into-arbiter.html">Convert a Secondary to an Arbiter</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="administration/replica-set-maintenance.html">Replica Set Maintenance Tutorials</a><ul><li class="toctree-l3"><a class="reference internal" href="tutorial/change-oplog-size.html">Change the Size of the Oplog</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/perform-maintence-on-replica-set-members.html">Perform Maintenance on Replica Set Members</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/force-member-to-be-primary.html">Force a Member to Become Primary</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/resync-replica-set-member.html">Resync a Member of a Replica Set</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/configure-replica-set-tag-sets.html">Configure Replica Set Tag Sets</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/reconfigure-replica-set-with-unavailable-members.html">Reconfigure a Replica Set with Unavailable Members</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/manage-chained-replication.html">Manage Chained Replication</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/change-hostnames-in-a-replica-set.html">Change Hostnames in a Replica Set</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/configure-replica-set-secondary-sync-target.html">Configure a Secondary’s Sync Target</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="reference/replication.html">Replication Reference</a><ul><li class="toctree-l3"><a class="reference internal" href="reference/replica-configuration.html">Replica Set Configuration</a></li><li class="toctree-l3"><a class="reference internal" href="reference/replica-set-protocol-versions.html">Replica Set Protocol Version</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/troubleshoot-replica-sets.html">Troubleshoot Replica Sets</a></li><li class="toctree-l3"><a class="reference internal" href="reference/local-database.html">The <code class="docutils literal"><span class="pre">local</span></code> Database</a></li><li class="toctree-l3"><a class="reference internal" href="reference/replica-states.html">Replica Set Member States</a></li></ul></li></ul></li><li class="toctree-l1"><a class="reference internal" href="sharding.html">Sharding</a><ul><li class="toctree-l2"><a class="reference internal" href="core/sharded-cluster-components.html">Sharded Cluster Components</a><ul><li class="toctree-l3"><a class="reference internal" href="core/sharded-cluster-shards.html">Shards</a></li><li class="toctree-l3"><a class="reference internal" href="core/sharded-cluster-config-servers.html">Config Servers (metadata)</a></li><li class="toctree-l3"><a class="reference internal" href="core/sharded-cluster-query-router.html">Router (mongos)</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="core/sharding-shard-key.html">Shard Keys</a></li><li class="toctree-l2"><a class="reference internal" href="core/hashed-sharding.html">Hashed Sharding</a></li><li class="toctree-l2"><a class="reference internal" href="core/ranged-sharding.html">Ranged Sharding</a></li><li class="toctree-l2"><a class="reference internal" href="tutorial/deploy-shard-cluster.html">Deploy a Sharded Cluster</a></li><li class="toctree-l2"><a class="reference internal" href="core/zone-sharding.html">Zones</a><ul><li class="toctree-l3"><a class="reference internal" href="tutorial/manage-shard-zone.html">Manage Shard Zones</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/sharding-segmenting-data-by-location.html">Segmenting Data by Location</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/sharding-tiered-hardware-for-varying-slas.html">Tiered Hardware for Varying SLA or SLO</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/sharding-segmenting-shards.html">Segmenting Data by Application or Customer</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/sharding-high-availability-writes.html">Distributed Local Writes for Insert Only Workloads</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="core/sharding-data-partitioning.html">Data Partitioning with Chunks</a><ul><li class="toctree-l3"><a class="reference internal" href="tutorial/create-chunks-in-sharded-cluster.html">Create Chunks in a Sharded Cluster</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/split-chunks-in-sharded-cluster.html">Split Chunks in a Sharded Cluster</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/merge-chunks-in-sharded-cluster.html">Merge Chunks in a Sharded Cluster</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/modify-chunk-size-in-sharded-cluster.html">Modify Chunk Size in a Sharded Cluster</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="core/sharding-balancer-administration.html">Balancer</a><ul><li class="toctree-l3"><a class="reference internal" href="tutorial/manage-sharded-cluster-balancer.html">Manage Sharded Cluster Balancer</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/migrate-chunks-in-sharded-cluster.html">Migrate Chunks in a Sharded Cluster</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="administration/sharded-cluster-administration.html">Administration</a><ul><li class="toctree-l3"><a class="reference internal" href="administration/sharded-cluster-config-servers.html">Config Server Administration</a><ul><li class="toctree-l4"><a class="reference internal" href="tutorial/replace-config-server.html">Replace a Config Server</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="tutorial/view-sharded-cluster-configuration.html">View Cluster Configuration</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/restart-sharded-cluster.html">Restart a Sharded Cluster</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/migrate-sharded-cluster-to-new-hardware.html">Migrate a Sharded Cluster to Different Hardware</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/add-shards-to-shard-cluster.html">Add Shards to a Cluster</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/remove-shards-from-cluster.html">Remove Shards from an Existing Sharded Cluster</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/clear-jumbo-flag.html">Clear <code class="docutils literal"><span class="pre">jumbo</span></code> Flag</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/backup-sharded-cluster-metadata.html">Back Up Cluster Metadata</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/convert-sharded-cluster-to-replica-set.html">Convert Sharded Cluster to Replica Set</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/convert-replica-set-to-replicated-shard-cluster.html">Convert a Replica Set to a Sharded Cluster</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/convert-shard-standalone-to-shard-replica-set.html">Convert a Shard Standalone to a Shard Replica Set</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="reference/sharding.html">Sharding Reference</a><ul><li class="toctree-l3"><a class="reference internal" href="core/sharded-cluster-requirements.html">Operational Restrictions</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/troubleshoot-sharded-clusters.html">Troubleshoot Sharded Clusters</a></li><li class="toctree-l3"><a class="reference internal" href="reference/config-database.html">Config Database</a></li></ul></li></ul></li><li class="toctree-l1"><a class="reference internal" href="administration.html">Administration</a><ul><li class="toctree-l2"><a class="reference internal" href="administration/production-notes.html">Production Notes</a></li><li class="toctree-l2"><a class="reference internal" href="administration/production-checklist-operations.html">Operations Checklist</a></li><li class="toctree-l2"><a class="reference internal" href="administration/production-checklist-development.html">Development Checklist</a></li><li class="toctree-l2"><a class="reference internal" href="administration/analyzing-mongodb-performance.html">Performance</a><ul><li class="toctree-l3"><a class="reference internal" href="tutorial/manage-the-database-profiler.html">Database Profiler</a><ul><li class="toctree-l4"><a class="reference internal" href="reference/database-profiler.html">Database Profiler Output</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="tutorial/transparent-huge-pages.html">Disable Transparent Huge Pages (THP)</a></li><li class="toctree-l3"><a class="reference internal" href="reference/ulimit.html">UNIX <code class="docutils literal"><span class="pre">ulimit</span></code> Settings</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="administration/configuration-and-maintenance.html">Configuration and Maintenance</a><ul><li class="toctree-l3"><a class="reference internal" href="administration/configuration.html">Run-time Database Configuration</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/upgrade-revision.html">Upgrade to the Latest Revision of MongoDB</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/manage-mongodb-processes.html">Manage <code class="docutils literal"><span class="pre">mongod</span></code> Processes</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/terminate-running-operations.html">Terminate Running Operations</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/rotate-log-files.html">Rotate Log Files</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="data-center-awareness.html">Data Center Awareness</a><ul><li class="toctree-l3"><a class="reference internal" href="core/workload-isolation.html">Workload Isolation in MongoDB Deployments</a></li><li class="toctree-l3"><a class="reference internal" href="core/zone-sharding.html">Zones</a><ul><li class="toctree-l4"><a class="reference internal" href="tutorial/manage-shard-zone.html">Manage Shard Zones</a></li><li class="toctree-l4"><a class="reference internal" href="tutorial/sharding-segmenting-data-by-location.html">Segmenting Data by Location</a></li><li class="toctree-l4"><a class="reference internal" href="tutorial/sharding-tiered-hardware-for-varying-slas.html">Tiered Hardware for Varying SLA or SLO</a></li><li class="toctree-l4"><a class="reference internal" href="tutorial/sharding-segmenting-shards.html">Segmenting Data by Application or Customer</a></li><li class="toctree-l4"><a class="reference internal" href="tutorial/sharding-high-availability-writes.html">Distributed Local Writes for Insert Only Workloads</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="tutorial/manage-shard-zone.html">Manage Shard Zones</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="core/backups.html">MongoDB Backup Methods</a><ul><li class="toctree-l3"><a class="reference internal" href="tutorial/backup-with-filesystem-snapshots.html">Back Up and Restore with Filesystem Snapshots</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/backup-and-restore-tools.html">Back Up and Restore with MongoDB Tools</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/restore-replica-set-from-backup.html">Restore a Replica Set from MongoDB Backups</a></li><li class="toctree-l3"><a class="reference internal" href="administration/backup-sharded-clusters.html">Backup and Restore Sharded Clusters</a><ul><li class="toctree-l4"><a class="reference internal" href="tutorial/backup-sharded-cluster-with-filesystem-snapshots.html">Back Up a Sharded Cluster with File System Snapshots</a></li><li class="toctree-l4"><a class="reference internal" href="tutorial/backup-sharded-cluster-with-database-dumps.html">Back Up a Sharded Cluster with Database Dumps</a></li><li class="toctree-l4"><a class="reference internal" href="tutorial/schedule-backup-window-for-sharded-clusters.html">Schedule Backup Window for Sharded Clusters</a></li><li class="toctree-l4"><a class="reference internal" href="tutorial/restore-sharded-cluster.html">Restore a Sharded Cluster</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="tutorial/recover-data-following-unexpected-shutdown.html">Recover a Standalone after an Unexpected Shutdown</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="administration/monitoring.html">Monitoring for MongoDB</a><ul><li class="toctree-l3"><a class="reference internal" href="administration/free-monitoring.html">Free Monitoring</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/monitor-with-snmp.html">Monitor MongoDB With SNMP on Linux</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/monitor-with-snmp-on-windows.html">Monitor MongoDB Windows with SNMP</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/troubleshoot-snmp.html">Troubleshoot SNMP</a></li></ul></li></ul></li><li class="toctree-l1"><a class="reference internal" href="storage.html">Storage</a><ul><li class="toctree-l2"><a class="reference internal" href="core/storage-engines.html">Storage Engines</a><ul><li class="toctree-l3"><a class="reference internal" href="core/wiredtiger.html">WiredTiger Storage Engine</a><ul><li class="toctree-l4"><a class="reference internal" href="tutorial/change-standalone-wiredtiger.html">Change Standalone to WiredTiger</a></li><li class="toctree-l4"><a class="reference internal" href="tutorial/change-replica-set-wiredtiger.html">Change Replica Set to WiredTiger</a></li><li class="toctree-l4"><a class="reference internal" href="tutorial/change-sharded-cluster-wiredtiger.html">Change Sharded Cluster to WiredTiger</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="core/inmemory.html">In-Memory Storage Engine</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="core/journaling.html">Journaling</a><ul><li class="toctree-l3"><a class="reference internal" href="tutorial/manage-journaling.html">Manage Journaling</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="core/gridfs.html">GridFS</a></li><li class="toctree-l2"><a class="reference internal" href="faq/storage.html">FAQ: MongoDB Storage</a></li></ul></li><li class="toctree-l1"><a class="reference internal" href="faq.html">Frequently Asked Questions</a><ul><li class="toctree-l2"><a class="reference internal" href="faq/fundamentals.html">FAQ: MongoDB Fundamentals</a></li><li class="toctree-l2"><a class="reference internal" href="faq/indexes.html">FAQ: Indexes</a></li><li class="toctree-l2"><a class="reference internal" href="faq/concurrency.html">FAQ: Concurrency</a></li><li class="toctree-l2"><a class="reference internal" href="faq/sharding.html">FAQ: Sharding with MongoDB</a></li><li class="toctree-l2"><a class="reference internal" href="faq/replica-sets.html">FAQ: Replication and Replica Sets</a></li><li class="toctree-l2"><a class="reference internal" href="faq/storage.html">FAQ: MongoDB Storage</a></li><li class="toctree-l2"><a class="reference internal" href="faq/diagnostics.html">FAQ: MongoDB Diagnostics</a></li></ul></li><li class="toctree-l1"><a class="reference internal" href="reference.html">Reference</a><ul><li class="toctree-l2"><a class="reference internal" href="reference/operator.html">Operators</a><ul><li class="toctree-l3"><a class="reference internal" href="reference/operator/query.html">Query and Projection Operators</a><ul><li class="toctree-l4"><a class="reference internal" href="reference/operator/query-comparison.html">Comparison Query Operators</a><ul><li class="toctree-l5"><a class="reference internal" href="reference/operator/query/eq.html">$eq</a></li><li class="toctree-l5"><a class="reference internal" href="reference/operator/query/gt.html">$gt</a></li><li class="toctree-l5"><a class="reference internal" href="reference/operator/query/gte.html">$gte</a></li><li class="toctree-l5"><a class="reference internal" href="reference/operator/query/in.html">$in</a></li><li class="toctree-l5"><a class="reference internal" href="reference/operator/query/lt.html">$lt</a></li><li class="toctree-l5"><a class="reference internal" href="reference/operator/query/lte.html">$lte</a></li><li class="toctree-l5"><a class="reference internal" href="reference/operator/query/ne.html">$ne</a></li><li class="toctree-l5"><a class="reference internal" href="reference/operator/query/nin.html">$nin</a></li></ul></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/query-logical.html">Logical Query Operators</a><ul><li class="toctree-l5"><a class="reference internal" href="reference/operator/query/and.html">$and</a></li><li class="toctree-l5"><a class="reference internal" href="reference/operator/query/not.html">$not</a></li><li class="toctree-l5"><a class="reference internal" href="reference/operator/query/nor.html">$nor</a></li><li class="toctree-l5"><a class="reference internal" href="reference/operator/query/or.html">$or</a></li></ul></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/query-element.html">Element Query Operators</a><ul><li class="toctree-l5"><a class="reference internal" href="reference/operator/query/exists.html">$exists</a></li><li class="toctree-l5"><a class="reference internal" href="reference/operator/query/type.html">$type</a></li></ul></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/query-evaluation.html">Evaluation Query Operators</a><ul><li class="toctree-l5"><a class="reference internal" href="reference/operator/query/expr.html">$expr</a></li><li class="toctree-l5"><a class="reference internal" href="reference/operator/query/jsonSchema.html">$jsonSchema</a></li><li class="toctree-l5"><a class="reference internal" href="reference/operator/query/mod.html">$mod</a></li><li class="toctree-l5"><a class="reference internal" href="reference/operator/query/regex.html">$regex</a></li><li class="toctree-l5"><a class="reference internal" href="reference/operator/query/text.html">$text</a></li><li class="toctree-l5"><a class="reference internal" href="reference/operator/query/where.html">$where</a></li></ul></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/query-geospatial.html">Geospatial Query Operators</a><ul><li class="toctree-l5"><a class="reference internal" href="reference/operator/query/geoIntersects.html">$geoIntersects</a></li><li class="toctree-l5"><a class="reference internal" href="reference/operator/query/geoWithin.html">$geoWithin</a></li><li class="toctree-l5"><a class="reference internal" href="reference/operator/query/near.html">$near</a></li><li class="toctree-l5"><a class="reference internal" href="reference/operator/query/nearSphere.html">$nearSphere</a></li><li class="toctree-l5"><a class="reference internal" href="reference/operator/query/box.html">$box</a></li><li class="toctree-l5"><a class="reference internal" href="reference/operator/query/center.html">$center</a></li><li class="toctree-l5"><a class="reference internal" href="reference/operator/query/centerSphere.html">$centerSphere</a></li><li class="toctree-l5"><a class="reference internal" href="reference/operator/query/geometry.html">$geometry</a></li><li class="toctree-l5"><a class="reference internal" href="reference/operator/query/maxDistance.html">$maxDistance</a></li><li class="toctree-l5"><a class="reference internal" href="reference/operator/query/minDistance.html">$minDistance</a></li><li class="toctree-l5"><a class="reference internal" href="reference/operator/query/polygon.html">$polygon</a></li><li class="toctree-l5"><a class="reference internal" href="reference/operator/query/uniqueDocs.html">$uniqueDocs</a></li></ul></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/query-array.html">Array Query Operators</a><ul><li class="toctree-l5"><a class="reference internal" href="reference/operator/query/all.html">$all</a></li><li class="toctree-l5"><a class="reference internal" href="reference/operator/query/elemMatch.html">$elemMatch (query)</a></li><li class="toctree-l5"><a class="reference internal" href="reference/operator/query/size.html">$size</a></li></ul></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/query-bitwise.html">Bitwise Query Operators</a><ul><li class="toctree-l5"><a class="reference internal" href="reference/operator/query/bitsAllClear.html">$bitsAllClear</a></li><li class="toctree-l5"><a class="reference internal" href="reference/operator/query/bitsAllSet.html">$bitsAllSet</a></li><li class="toctree-l5"><a class="reference internal" href="reference/operator/query/bitsAnyClear.html">$bitsAnyClear</a></li><li class="toctree-l5"><a class="reference internal" href="reference/operator/query/bitsAnySet.html">$bitsAnySet</a></li></ul></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/query/comment.html">$comment</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/projection.html">Projection Operators</a><ul><li class="toctree-l5"><a class="reference internal" href="reference/operator/projection/positional.html">$ (projection)</a></li><li class="toctree-l5"><a class="reference internal" href="reference/operator/projection/elemMatch.html">$elemMatch (projection)</a></li><li class="toctree-l5"><a class="reference internal" href="reference/operator/projection/meta.html">$meta</a></li><li class="toctree-l5"><a class="reference internal" href="reference/operator/projection/slice.html">$slice (projection)</a></li></ul></li></ul></li><li class="toctree-l3"><a class="reference internal" href="reference/operator/update.html">Update Operators</a><ul><li class="toctree-l4"><a class="reference internal" href="reference/operator/update-field.html">Field Update Operators</a><ul><li class="toctree-l5"><a class="reference internal" href="reference/operator/update/currentDate.html">$currentDate</a></li><li class="toctree-l5"><a class="reference internal" href="reference/operator/update/inc.html">$inc</a></li><li class="toctree-l5"><a class="reference internal" href="reference/operator/update/min.html">$min</a></li><li class="toctree-l5"><a class="reference internal" href="reference/operator/update/max.html">$max</a></li><li class="toctree-l5"><a class="reference internal" href="reference/operator/update/mul.html">$mul</a></li><li class="toctree-l5"><a class="reference internal" href="reference/operator/update/rename.html">$rename</a></li><li class="toctree-l5"><a class="reference internal" href="reference/operator/update/set.html">$set</a></li><li class="toctree-l5"><a class="reference internal" href="reference/operator/update/setOnInsert.html">$setOnInsert</a></li><li class="toctree-l5"><a class="reference internal" href="reference/operator/update/unset.html">$unset</a></li></ul></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/update-array.html">Array Update Operators</a><ul><li class="toctree-l5"><a class="reference internal" href="reference/operator/update/positional.html">$ (update)</a></li><li class="toctree-l5"><a class="reference internal" href="reference/operator/update/positional-all.html">$[]</a></li><li class="toctree-l5"><a class="reference internal" href="reference/operator/update/positional-filtered.html">$[&lt;identifier&gt;]</a></li><li class="toctree-l5"><a class="reference internal" href="reference/operator/update/addToSet.html">$addToSet</a></li><li class="toctree-l5"><a class="reference internal" href="reference/operator/update/pop.html">$pop</a></li><li class="toctree-l5"><a class="reference internal" href="reference/operator/update/pull.html">$pull</a></li><li class="toctree-l5"><a class="reference internal" href="reference/operator/update/push.html">$push</a></li><li class="toctree-l5"><a class="reference internal" href="reference/operator/update/pullAll.html">$pullAll</a></li><li class="toctree-l5"><a class="reference internal" href="reference/operator/update/each.html">$each</a></li><li class="toctree-l5"><a class="reference internal" href="reference/operator/update/position.html">$position</a></li><li class="toctree-l5"><a class="reference internal" href="reference/operator/update/slice.html">$slice</a></li><li class="toctree-l5"><a class="reference internal" href="reference/operator/update/sort.html">$sort</a></li></ul></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/update-bitwise.html">Bitwise Update Operator</a><ul><li class="toctree-l5"><a class="reference internal" href="reference/operator/update/bit.html">$bit</a></li></ul></li></ul></li><li class="toctree-l3"><a class="reference internal" href="reference/operator/aggregation-pipeline.html">Aggregation Pipeline Stages</a><ul><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/addFields.html">$addFields (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/bucket.html">$bucket (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/bucketAuto.html">$bucketAuto (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/collStats.html">$collStats (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/count.html">$count (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/currentOp.html">$currentOp (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/facet.html">$facet (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/geoNear.html">$geoNear (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/graphLookup.html">$graphLookup (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/group.html">$group (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/indexStats.html">$indexStats (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/limit.html">$limit (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/listLocalSessions.html">$listLocalSessions</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/listSessions.html">$listSessions</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/lookup.html">$lookup (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/match.html">$match (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/merge.html">$merge (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/out.html">$out (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/planCacheStats.html">$planCacheStats</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/project.html">$project (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/redact.html">$redact (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/replaceRoot.html">$replaceRoot (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/replaceWith.html">$replaceWith (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/sample.html">$sample (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/set.html">$set (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/skip.html">$skip (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/sort.html">$sort (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/sortByCount.html">$sortByCount (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/unset.html">$unset (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/unwind.html">$unwind (aggregation)</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="reference/operator/aggregation.html">Aggregation Pipeline Operators</a><ul><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/abs.html">$abs (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/acos.html">$acos (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/acosh.html">$acosh (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/add.html">$add (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/addToSet.html">$addToSet (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/allElementsTrue.html">$allElementsTrue (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/and.html">$and (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/anyElementTrue.html">$anyElementTrue (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/arrayElemAt.html">$arrayElemAt (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/arrayToObject.html">$arrayToObject (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/asin.html">$asin (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/asinh.html">$asinh (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/atan.html">$atan (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/atan2.html">$atan2 (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/atanh.html">$atanh (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/avg.html">$avg (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/ceil.html">$ceil (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/cmp.html">$cmp (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/concat.html">$concat (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/concatArrays.html">$concatArrays (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/cond.html">$cond (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/convert.html">$convert (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/cos.html">$cos (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/dateFromParts.html">$dateFromParts (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/dateToParts.html">$dateToParts (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/dateFromString.html">$dateFromString (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/dateToString.html">$dateToString (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/dayOfMonth.html">$dayOfMonth (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/dayOfWeek.html">$dayOfWeek (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/dayOfYear.html">$dayOfYear (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/degreesToRadians.html">$degreesToRadians (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/divide.html">$divide (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/eq.html">$eq (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/exp.html">$exp (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/filter.html">$filter (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/first.html">$first (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/floor.html">$floor (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/gt.html">$gt (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/gte.html">$gte (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/hour.html">$hour (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/ifNull.html">$ifNull (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/in.html">$in (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/indexOfArray.html">$indexOfArray (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/indexOfBytes.html">$indexOfBytes (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/indexOfCP.html">$indexOfCP (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/isArray.html">$isArray (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/isoDayOfWeek.html">$isoDayOfWeek (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/isoWeek.html">$isoWeek (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/isoWeekYear.html">$isoWeekYear (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/last.html">$last (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/let.html">$let (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/literal.html">$literal (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/ln.html">$ln (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/log.html">$log (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/log10.html">$log10 (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/lt.html">$lt (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/lte.html">$lte (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/ltrim.html">$ltrim (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/map.html">$map (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/max.html">$max (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/mergeObjects.html">$mergeObjects (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/meta.html">$meta (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/min.html">$min (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/millisecond.html">$millisecond (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/minute.html">$minute (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/mod.html">$mod (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/month.html">$month (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/multiply.html">$multiply (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/ne.html">$ne (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/not.html">$not (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/objectToArray.html">$objectToArray (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/or.html">$or (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/pow.html">$pow (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/push.html">$push (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/radiansToDegrees.html">$radiansToDegrees (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/range.html">$range (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/reduce.html">$reduce (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/regexFind.html">$regexFind (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/regexFindAll.html">$regexFindAll (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/regexMatch.html">$regexMatch (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/reverseArray.html">$reverseArray (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/round.html">$round (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/rtrim.html">$rtrim (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/second.html">$second (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/setDifference.html">$setDifference (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/setEquals.html">$setEquals (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/setIntersection.html">$setIntersection (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/setIsSubset.html">$setIsSubset (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/setUnion.html">$setUnion (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/size.html">$size (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/sin.html">$sin (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/slice.html">$slice (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/split.html">$split (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/sqrt.html">$sqrt (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/stdDevPop.html">$stdDevPop (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/stdDevSamp.html">$stdDevSamp (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/strcasecmp.html">$strcasecmp (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/strLenBytes.html">$strLenBytes (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/strLenCP.html">$strLenCP (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/substr.html">$substr (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/substrBytes.html">$substrBytes (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/substrCP.html">$substrCP (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/subtract.html">$subtract (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/sum.html">$sum (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/switch.html">$switch (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/tan.html">$tan (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/toBool.html">$toBool (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/toDate.html">$toDate (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/toDecimal.html">$toDecimal (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/toDouble.html">$toDouble(aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/toInt.html">$toInt (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/toLong.html">$toLong (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/toObjectId.html">$toObjectId (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/toString.html">$toString (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/toLower.html">$toLower (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/toUpper.html">$toUpper (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/trim.html">$trim (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/trunc.html">$trunc (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/type.html">$type (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/week.html">$week (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/year.html">$year (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/aggregation/zip.html">$zip (aggregation)</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="reference/operator/query-modifier.html">Query Modifiers</a><ul><li class="toctree-l4"><a class="reference internal" href="reference/operator/meta/comment.html">$comment</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/meta/explain.html">$explain</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/meta/hint.html">$hint</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/meta/max.html">$max</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/meta/maxTimeMS.html">$maxTimeMS</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/meta/min.html">$min</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/meta/orderby.html">$orderby</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/meta/query.html">$query</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/meta/returnKey.html">$returnKey</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/meta/showDiskLoc.html">$showDiskLoc</a></li><li class="toctree-l4"><a class="reference internal" href="reference/operator/meta/natural.html">$natural</a></li></ul></li></ul></li><li class="toctree-l2"><a class="reference internal" href="reference/command.html">Database Commands</a><ul><li class="toctree-l3"><a class="reference internal" href="reference/command/nav-aggregation.html">Aggregation Commands</a><ul><li class="toctree-l4"><a class="reference internal" href="reference/command/aggregate.html">aggregate</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/count.html">count</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/distinct.html">distinct</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/mapReduce.html">mapReduce</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="reference/command/nav-geospatial.html">Geospatial Commands</a><ul><li class="toctree-l4"><a class="reference internal" href="reference/command/geoSearch.html">geoSearch</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="reference/command/nav-crud.html">Query and Write Operation Commands</a><ul><li class="toctree-l4"><a class="reference internal" href="reference/command/delete.html">delete</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/find.html">find</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/findAndModify.html">findAndModify</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/getLastError.html">getLastError</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/getMore.html">getMore</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/insert.html">insert</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/resetError.html">resetError</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/update.html">update</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="reference/command/nav-plan-cache.html">Query Plan Cache Commands</a><ul><li class="toctree-l4"><a class="reference internal" href="reference/command/planCacheClear.html">planCacheClear</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/planCacheClearFilters.html">planCacheClearFilters</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/planCacheListFilters.html">planCacheListFilters</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/planCacheListPlans.html">planCacheListPlans</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/planCacheListQueryShapes.html">planCacheListQueryShapes</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/planCacheSetFilter.html">planCacheSetFilter</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="reference/command/nav-authentication.html">Authentication Commands</a><ul><li class="toctree-l4"><a class="reference internal" href="reference/command/authenticate.html">authenticate</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/getnonce.html">getnonce</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/logout.html">logout</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="reference/command/nav-user-management.html">User Management Commands</a><ul><li class="toctree-l4"><a class="reference internal" href="reference/command/createUser.html">createUser</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/dropAllUsersFromDatabase.html">dropAllUsersFromDatabase</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/dropUser.html">dropUser</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/grantRolesToUser.html">grantRolesToUser</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/revokeRolesFromUser.html">revokeRolesFromUser</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/updateUser.html">updateUser</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/usersInfo.html">usersInfo</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="reference/command/nav-role-management.html">Role Management Commands</a><ul><li class="toctree-l4"><a class="reference internal" href="reference/command/createRole.html">createRole</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/dropRole.html">dropRole</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/dropAllRolesFromDatabase.html">dropAllRolesFromDatabase</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/grantPrivilegesToRole.html">grantPrivilegesToRole</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/grantRolesToRole.html">grantRolesToRole</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/invalidateUserCache.html">invalidateUserCache</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/revokePrivilegesFromRole.html">revokePrivilegesFromRole</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/revokeRolesFromRole.html">revokeRolesFromRole</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/rolesInfo.html">rolesInfo</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/updateRole.html">updateRole</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="reference/command/nav-replication.html">Replication Commands</a><ul><li class="toctree-l4"><a class="reference internal" href="reference/command/applyOps.html">applyOps</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/isMaster.html">isMaster</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/replSetAbortPrimaryCatchUp.html">replSetAbortPrimaryCatchUp</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/replSetFreeze.html">replSetFreeze</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/replSetGetConfig.html">replSetGetConfig</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/replSetGetStatus.html">replSetGetStatus</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/replSetInitiate.html">replSetInitiate</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/replSetMaintenance.html">replSetMaintenance</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/replSetReconfig.html">replSetReconfig</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/replSetResizeOplog.html">replSetResizeOplog</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/replSetStepDown.html">replSetStepDown</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/replSetSyncFrom.html">replSetSyncFrom</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="reference/command/nav-sharding.html">Sharding Commands</a><ul><li class="toctree-l4"><a class="reference internal" href="reference/command/addShard.html">addShard</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/addShardToZone.html">addShardToZone</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/balancerStart.html">balancerStart</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/balancerStatus.html">balancerStatus</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/balancerStop.html">balancerStop</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/checkShardingIndex.html">checkShardingIndex</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/clearJumboFlag.html">clearJumboFlag</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/cleanupOrphaned.html">cleanupOrphaned</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/enableSharding.html">enableSharding</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/flushRouterConfig.html">flushRouterConfig</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/getShardMap.html">getShardMap</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/getShardVersion.html">getShardVersion</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/isdbgrid.html">isdbgrid</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/listShards.html">listShards</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/medianKey.html">medianKey</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/moveChunk.html">moveChunk</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/movePrimary.html">movePrimary</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/mergeChunks.html">mergeChunks</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/removeShard.html">removeShard</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/removeShardFromZone.html">removeShardFromZone</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/setShardVersion.html">setShardVersion</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/shardCollection.html">shardCollection</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/shardingState.html">shardingState</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/split.html">split</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/splitChunk.html">splitChunk</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/splitVector.html">splitVector</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/unsetSharding.html">unsetSharding</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/updateZoneKeyRange.html">updateZoneKeyRange</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="reference/command/nav-sessions.html">Sessions Commands</a><ul><li class="toctree-l4"><a class="reference internal" href="reference/command/abortTransaction.html">abortTransaction</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/commitTransaction.html">commitTransaction</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/endSessions.html">endSessions</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/killAllSessions.html">killAllSessions</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/killAllSessionsByPattern.html">killAllSessionsByPattern</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/killSessions.html">killSessions</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/refreshSessions.html">refreshSessions</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/startSession.html">startSession</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="reference/command/nav-administration.html">Administration Commands</a><ul><li class="toctree-l4"><a class="reference internal" href="reference/command/clean.html">clean</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/cloneCollection.html">cloneCollection</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/cloneCollectionAsCapped.html">cloneCollectionAsCapped</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/collMod.html">collMod</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/compact.html">compact</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/connPoolSync.html">connPoolSync</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/convertToCapped.html">convertToCapped</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/create.html">create</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/createIndexes.html">createIndexes</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/currentOp.html">currentOp</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/drop.html">drop</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/dropDatabase.html">dropDatabase</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/dropConnections.html">dropConnections</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/dropIndexes.html">dropIndexes</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/filemd5.html">filemd5</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/fsync.html">fsync</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/fsyncUnlock.html">fsyncUnlock</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/getParameter.html">getParameter</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/killCursors.html">killCursors</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/killOp.html">killOp</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/listCollections.html">listCollections</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/listDatabases.html">listDatabases</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/listIndexes.html">listIndexes</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/logRotate.html">logRotate</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/reIndex.html">reIndex</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/renameCollection.html">renameCollection</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/setFeatureCompatibilityVersion.html">setFeatureCompatibilityVersion</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/setParameter.html">setParameter</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/shutdown.html">shutdown</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="reference/command/nav-diagnostic.html">Diagnostic Commands</a><ul><li class="toctree-l4"><a class="reference internal" href="reference/command/availableQueryOptions.html">availableQueryOptions</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/buildInfo.html">buildInfo</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/collStats.html">collStats</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/connPoolStats.html">connPoolStats</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/connectionStatus.html">connectionStatus</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/cursorInfo.html">cursorInfo</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/dataSize.html">dataSize</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/dbHash.html">dbHash</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/dbStats.html">dbStats</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/diagLogging.html">diagLogging</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/driverOIDTest.html">driverOIDTest</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/explain.html">explain</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/features.html">features</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/getCmdLineOpts.html">getCmdLineOpts</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/getLog.html">getLog</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/hostInfo.html">hostInfo</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/isSelf.html">isSelf</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/listCommands.html">listCommands</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/netstat.html">netstat</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/ping.html">ping</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/profile.html">profile</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/serverStatus.html">serverStatus</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/shardConnPoolStats.html">shardConnPoolStats</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/top.html">top</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/validate.html">validate</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/whatsmyuri.html">whatsmyuri</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="reference/command/nav-free-monitoring.html">Free Monitoring Commands</a><ul><li class="toctree-l4"><a class="reference internal" href="reference/command/getFreeMonitoringStatus.html">getFreeMonitoringStatus</a></li><li class="toctree-l4"><a class="reference internal" href="reference/command/setFreeMonitoring.html">setFreeMonitoring</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="reference/command/nav-auditing.html">System Events Auditing Commands</a><ul><li class="toctree-l4"><a class="reference internal" href="reference/command/logApplicationMessage.html">logApplicationMessage</a></li></ul></li></ul></li><li class="toctree-l2"><a class="reference internal" href="reference/method.html"><code class="docutils literal"><span class="pre">mongo</span></code> Shell Methods</a><ul><li class="toctree-l3"><a class="reference internal" href="reference/method/js-collection.html">Collection Methods</a><ul><li class="toctree-l4"><a class="reference internal" href="reference/method/db.collection.aggregate.html">db.collection.aggregate()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.collection.bulkWrite.html">db.collection.bulkWrite()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.collection.copyTo.html">db.collection.copyTo()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.collection.count.html">db.collection.count()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.collection.countDocuments.html">db.collection.countDocuments()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.collection.estimatedDocumentCount.html">db.collection.estimatedDocumentCount()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.collection.createIndex.html">db.collection.createIndex()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.collection.createIndexes.html">db.collection.createIndexes()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.collection.dataSize.html">db.collection.dataSize()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.collection.deleteOne.html">db.collection.deleteOne()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.collection.deleteMany.html">db.collection.deleteMany()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.collection.distinct.html">db.collection.distinct()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.collection.drop.html">db.collection.drop()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.collection.dropIndex.html">db.collection.dropIndex()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.collection.dropIndexes.html">db.collection.dropIndexes()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.collection.ensureIndex.html">db.collection.ensureIndex()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.collection.explain.html">db.collection.explain()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.collection.find.html">db.collection.find()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.collection.findAndModify.html">db.collection.findAndModify()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.collection.findOne.html">db.collection.findOne()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.collection.findOneAndDelete.html">db.collection.findOneAndDelete()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.collection.findOneAndReplace.html">db.collection.findOneAndReplace()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.collection.findOneAndUpdate.html">db.collection.findOneAndUpdate()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.collection.getIndexes.html">db.collection.getIndexes()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.collection.getShardDistribution.html">db.collection.getShardDistribution()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.collection.getShardVersion.html">db.collection.getShardVersion()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.collection.insert.html">db.collection.insert()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.collection.insertOne.html">db.collection.insertOne()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.collection.insertMany.html">db.collection.insertMany()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.collection.isCapped.html">db.collection.isCapped()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.collection.latencyStats.html">db.collection.latencyStats()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.collection.mapReduce.html">db.collection.mapReduce()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.collection.reIndex.html">db.collection.reIndex()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.collection.remove.html">db.collection.remove()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.collection.renameCollection.html">db.collection.renameCollection()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.collection.replaceOne.html">db.collection.replaceOne()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.collection.save.html">db.collection.save()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.collection.stats.html">db.collection.stats()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.collection.storageSize.html">db.collection.storageSize()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.collection.totalIndexSize.html">db.collection.totalIndexSize()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.collection.totalSize.html">db.collection.totalSize()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.collection.update.html">db.collection.update()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.collection.updateOne.html">db.collection.updateOne()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.collection.updateMany.html">db.collection.updateMany()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.collection.watch.html">db.collection.watch()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.collection.validate.html">db.collection.validate()</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="reference/method/js-cursor.html">Cursor Methods</a><ul><li class="toctree-l4"><a class="reference internal" href="reference/method/cursor.addOption.html">cursor.addOption()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/cursor.allowPartialResults.html">cursor.allowPartialResults()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/cursor.batchSize.html">cursor.batchSize()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/cursor.close.html">cursor.close()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/cursor.isClosed.html">cursor.isClosed()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/cursor.collation.html">cursor.collation()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/cursor.comment.html">cursor.comment()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/cursor.count.html">cursor.count()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/cursor.explain.html">cursor.explain()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/cursor.forEach.html">cursor.forEach()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/cursor.hasNext.html">cursor.hasNext()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/cursor.hint.html">cursor.hint()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/cursor.isExhausted.html">cursor.isExhausted()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/cursor.itcount.html">cursor.itcount()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/cursor.limit.html">cursor.limit()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/cursor.map.html">cursor.map()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/cursor.max.html">cursor.max()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/cursor.maxTimeMS.html">cursor.maxTimeMS()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/cursor.min.html">cursor.min()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/cursor.next.html">cursor.next()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/cursor.noCursorTimeout.html">cursor.noCursorTimeout()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/cursor.objsLeftInBatch.html">cursor.objsLeftInBatch()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/cursor.pretty.html">cursor.pretty()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/cursor.readConcern.html">cursor.readConcern()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/cursor.readPref.html">cursor.readPref()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/cursor.returnKey.html">cursor.returnKey()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/cursor.showRecordId.html">cursor.showRecordId()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/cursor.size.html">cursor.size()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/cursor.skip.html">cursor.skip()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/cursor.sort.html">cursor.sort()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/cursor.tailable.html">cursor.tailable()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/cursor.toArray.html">cursor.toArray()</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="reference/method/js-database.html">Database Methods</a><ul><li class="toctree-l4"><a class="reference internal" href="reference/method/db.adminCommand.html">db.adminCommand()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.aggregate.html">db.aggregate()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.cloneCollection.html">db.cloneCollection()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.cloneDatabase.html">db.cloneDatabase()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.commandHelp.html">db.commandHelp()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.copyDatabase.html">db.copyDatabase()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.createCollection.html">db.createCollection()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.createView.html">db.createView()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.currentOp.html">db.currentOp()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.dropDatabase.html">db.dropDatabase()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.eval.html">db.eval()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.fsyncLock.html">db.fsyncLock()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.fsyncUnlock.html">db.fsyncUnlock()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.getCollection.html">db.getCollection()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.getCollectionInfos.html">db.getCollectionInfos()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.getCollectionNames.html">db.getCollectionNames()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.getLastError.html">db.getLastError()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.getLastErrorObj.html">db.getLastErrorObj()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.getLogComponents.html">db.getLogComponents()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.getMongo.html">db.getMongo()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.getName.html">db.getName()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.getProfilingLevel.html">db.getProfilingLevel()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.getProfilingStatus.html">db.getProfilingStatus()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.getReplicationInfo.html">db.getReplicationInfo()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.getSiblingDB.html">db.getSiblingDB()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.help.html">db.help()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.hostInfo.html">db.hostInfo()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.isMaster.html">db.isMaster()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.killOp.html">db.killOp()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.listCommands.html">db.listCommands()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.logout.html">db.logout()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.printCollectionStats.html">db.printCollectionStats()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.printReplicationInfo.html">db.printReplicationInfo()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.printShardingStatus.html">db.printShardingStatus()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.printSlaveReplicationInfo.html">db.printSlaveReplicationInfo()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.resetError.html">db.resetError()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.runCommand.html">db.runCommand()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.serverBuildInfo.html">db.serverBuildInfo()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.serverCmdLineOpts.html">db.serverCmdLineOpts()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.serverStatus.html">db.serverStatus()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.setLogLevel.html">db.setLogLevel()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.setProfilingLevel.html">db.setProfilingLevel()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.shutdownServer.html">db.shutdownServer()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.stats.html">db.stats()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.version.html">db.version()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.watch.html">db.watch()</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="reference/method/js-plan-cache.html">Query Plan Cache Methods</a><ul><li class="toctree-l4"><a class="reference internal" href="reference/method/db.collection.getPlanCache.html">db.collection.getPlanCache()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/PlanCache.clear.html">PlanCache.clear()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/PlanCache.clearPlansByQuery.html">PlanCache.clearPlansByQuery()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/PlanCache.getPlansByQuery.html">PlanCache.getPlansByQuery()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/PlanCache.help.html">PlanCache.help()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/PlanCache.listQueryShapes.html">PlanCache.listQueryShapes()</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="reference/method/js-bulk.html">Bulk Operation Methods</a><ul><li class="toctree-l4"><a class="reference internal" href="reference/method/db.collection.initializeOrderedBulkOp.html">db.collection.initializeOrderedBulkOp()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.collection.initializeUnorderedBulkOp.html">db.collection.initializeUnorderedBulkOp()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/Bulk.html">Bulk()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/Bulk.execute.html">Bulk.execute()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/Bulk.find.html">Bulk.find()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/Bulk.find.arrayFilters.html">Bulk.find.arrayFilters()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/Bulk.find.collation.html">Bulk.find.collation()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/Bulk.find.hint.html">Bulk.find.hint()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/Bulk.find.remove.html">Bulk.find.remove()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/Bulk.find.removeOne.html">Bulk.find.removeOne()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/Bulk.find.replaceOne.html">Bulk.find.replaceOne()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/Bulk.find.updateOne.html">Bulk.find.updateOne()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/Bulk.find.update.html">Bulk.find.update()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/Bulk.find.upsert.html">Bulk.find.upsert()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/Bulk.getOperations.html">Bulk.getOperations()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/Bulk.insert.html">Bulk.insert()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/Bulk.tojson.html">Bulk.tojson()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/Bulk.toString.html">Bulk.toString()</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="reference/method/js-user-management.html">User Management Methods</a><ul><li class="toctree-l4"><a class="reference internal" href="reference/method/db.auth.html">db.auth()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.changeUserPassword.html">db.changeUserPassword()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.createUser.html">db.createUser()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.dropUser.html">db.dropUser()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.dropAllUsers.html">db.dropAllUsers()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.getUser.html">db.getUser()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.getUsers.html">db.getUsers()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.grantRolesToUser.html">db.grantRolesToUser()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.removeUser.html">db.removeUser()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.revokeRolesFromUser.html">db.revokeRolesFromUser()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.updateUser.html">db.updateUser()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/passwordPrompt.html">passwordPrompt()</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="reference/method/js-role-management.html">Role Management Methods</a><ul><li class="toctree-l4"><a class="reference internal" href="reference/method/db.createRole.html">db.createRole()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.dropRole.html">db.dropRole()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.dropAllRoles.html">db.dropAllRoles()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.getRole.html">db.getRole()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.getRoles.html">db.getRoles()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.grantPrivilegesToRole.html">db.grantPrivilegesToRole()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.revokePrivilegesFromRole.html">db.revokePrivilegesFromRole()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.grantRolesToRole.html">db.grantRolesToRole()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.revokeRolesFromRole.html">db.revokeRolesFromRole()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.updateRole.html">db.updateRole()</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="reference/method/js-replication.html">Replication Methods</a><ul><li class="toctree-l4"><a class="reference internal" href="reference/method/rs.add.html">rs.add()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/rs.addArb.html">rs.addArb()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/rs.conf.html">rs.conf()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/rs.freeze.html">rs.freeze()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/rs.help.html">rs.help()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/rs.initiate.html">rs.initiate()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/rs.printReplicationInfo.html">rs.printReplicationInfo()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/rs.printSlaveReplicationInfo.html">rs.printSlaveReplicationInfo()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/rs.reconfig.html">rs.reconfig()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/rs.remove.html">rs.remove()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/rs.slaveOk.html">rs.slaveOk()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/rs.status.html">rs.status()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/rs.stepDown.html">rs.stepDown()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/rs.syncFrom.html">rs.syncFrom()</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="reference/method/js-sharding.html">Sharding Methods</a><ul><li class="toctree-l4"><a class="reference internal" href="reference/method/sh.addShard.html">sh.addShard()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/sh.addShardTag.html">sh.addShardTag()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/sh.addShardToZone.html">sh.addShardToZone()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/sh.addTagRange.html">sh.addTagRange()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/sh.disableBalancing.html">sh.disableBalancing()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/sh.enableBalancing.html">sh.enableBalancing()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/sh.disableAutoSplit.html">sh.disableAutoSplit</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/sh.enableAutoSplit.html">sh.enableAutoSplit</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/sh.enableSharding.html">sh.enableSharding()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/sh.getBalancerHost.html">sh.getBalancerHost()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/sh.getBalancerState.html">sh.getBalancerState()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/sh.removeTagRange.html">sh.removeTagRange()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/sh.removeRangeFromZone.html">sh.removeRangeFromZone()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/sh.help.html">sh.help()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/sh.isBalancerRunning.html">sh.isBalancerRunning()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/sh.moveChunk.html">sh.moveChunk()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/sh.removeShardTag.html">sh.removeShardTag()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/sh.removeShardFromZone.html">sh.removeShardFromZone()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/sh.setBalancerState.html">sh.setBalancerState()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/sh.shardCollection.html">sh.shardCollection()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/sh.splitAt.html">sh.splitAt()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/sh.splitFind.html">sh.splitFind()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/sh.startBalancer.html">sh.startBalancer()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/sh.status.html">sh.status()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/sh.stopBalancer.html">sh.stopBalancer()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/sh.waitForBalancer.html">sh.waitForBalancer()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/sh.waitForBalancerOff.html">sh.waitForBalancerOff()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/sh.waitForPingChange.html">sh.waitForPingChange()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/sh.updateZoneKeyRange.html">sh.updateZoneKeyRange()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/convertShardKeyToHashed.html">convertShardKeyToHashed</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="reference/method/js-free-monitoring.html">Free Monitoring Methods</a><ul><li class="toctree-l4"><a class="reference internal" href="reference/method/db.disableFreeMonitoring.html">db.disableFreeMonitoring()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.enableFreeMonitoring.html">db.enableFreeMonitoring()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/db.getFreeMonitoringStatus.html">db.getFreeMonitoringStatus</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="reference/method/js-constructor.html">Object Constructors and Methods</a><ul><li class="toctree-l4"><a class="reference internal" href="reference/method/BulkWriteResult.html">BulkWriteResult()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/Date.html">Date()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/ObjectId.html">ObjectId</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/ObjectId.getTimestamp.html">ObjectId.getTimestamp()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/ObjectId.toString.html">ObjectId.toString()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/ObjectId.valueOf.html">ObjectId.valueOf()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/UUID.html">UUID()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/WriteResult.html">WriteResult()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/WriteResult.hasWriteError.html">WriteResult.hasWriteError()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/WriteResult.hasWriteConcernError.html">WriteResult.hasWriteConcernError()</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="reference/method/js-connection.html">Connection Methods</a><ul><li class="toctree-l4"><a class="reference internal" href="reference/method/connect.html">connect()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/Mongo.html">Mongo()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/Mongo.getDB.html">Mongo.getDB()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/Mongo.getReadPrefMode.html">Mongo.getReadPrefMode()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/Mongo.getReadPrefTagSet.html">Mongo.getReadPrefTagSet()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/Mongo.isCausalConsistency.html">Mongo.isCausalConsistency()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/Mongo.setCausalConsistency.html">Mongo.setCausalConsistency()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/Mongo.setReadPref.html">Mongo.setReadPref()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/Mongo.setSlaveOk.html">Mongo.setSlaveOk()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/Mongo.startSession.html">Mongo.startSession()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/Mongo.watch.html">Mongo.watch()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/Session.html">Session</a><ul><li class="toctree-l5"><a class="reference internal" href="reference/method/Session.abortTransaction.html">Session.abortTransaction()</a></li><li class="toctree-l5"><a class="reference internal" href="reference/method/Session.commitTransaction.html">Session.commitTransaction()</a></li><li class="toctree-l5"><a class="reference internal" href="reference/method/Session.startTransaction.html">Session.startTransaction()</a></li></ul></li><li class="toctree-l4"><a class="reference internal" href="reference/method/SessionOptions.html">SessionOptions</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="reference/method/js-native.html">Native Methods</a><ul><li class="toctree-l4"><a class="reference internal" href="reference/method/cat.html">cat()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/cd.html">cd()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/copyDbpath.html">copyDbpath()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/getHostName.html">getHostName()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/getMemInfo.html">getMemInfo()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/hostname.html">hostname()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/isInteractive.html">isInteractive()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/listFiles.html">listFiles()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/load.html">load()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/ls.html">ls()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/md5sumFile.html">md5sumFile()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/mkdir.html">mkdir()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/pwd.html">pwd()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/quit.html">quit()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/removeFile.html">removeFile()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/resetDbpath.html">resetDbpath()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/sleep.html">sleep()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/setVerboseShell.html">setVerboseShell()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/version.html">version()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/isWindows.html">_isWindows()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/rand.html">_rand()</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="reference/method/js-client-side-field-level-encryption.html">Client-Side Field Level Encryption Methods</a><ul><li class="toctree-l4"><a class="reference internal" href="reference/method/getKeyVault.html">getKeyVault()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/KeyVault.createKey.html">KeyVault.createKey()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/KeyVault.deleteKey.html">KeyVault.deleteKey()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/KeyVault.getKey.html">KeyVault.getKey()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/KeyVault.getKeys.html">KeyVault.getKeys()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/KeyVault.addKeyAlternateName.html">KeyVault.addKeyAlternateName()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/KeyVault.removeKeyAlternateName.html">KeyVault.removeKeyAlternateName()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/KeyVault.getKeyByAltName.html">KeyVault.getKeyByAltName()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/getClientEncryption.html">getClientEncryption()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/ClientEncryption.encrypt.html">ClientEncryption.encrypt()</a></li><li class="toctree-l4"><a class="reference internal" href="reference/method/ClientEncryption.decrypt.html">ClientEncryption.decrypt()</a></li></ul></li></ul></li><li class="toctree-l2"><a class="reference internal" href="reference/program.html">MongoDB Package Components</a><ul><li class="toctree-l3"><a class="reference internal" href="reference/program/mongod.html"><code class="docutils literal"><span class="pre">mongod</span></code></a></li><li class="toctree-l3"><a class="reference internal" href="reference/program/mongos.html"><code class="docutils literal"><span class="pre">mongos</span></code></a></li><li class="toctree-l3"><a class="reference internal" href="reference/program/mongo.html"><code class="docutils literal"><span class="pre">mongo</span></code></a></li><li class="toctree-l3"><a class="reference internal" href="reference/program/mongod.exe.html"><code class="docutils literal"><span class="pre">mongod.exe</span></code></a></li><li class="toctree-l3"><a class="reference internal" href="reference/program/mongos.exe.html"><code class="docutils literal"><span class="pre">mongos.exe</span></code></a></li><li class="toctree-l3"><a class="reference internal" href="reference/program/mongodump.html"><code class="docutils literal"><span class="pre">mongodump</span></code></a></li><li class="toctree-l3"><a class="reference internal" href="reference/program/mongorestore.html"><code class="docutils literal"><span class="pre">mongorestore</span></code></a></li><li class="toctree-l3"><a class="reference internal" href="reference/program/bsondump.html"><code class="docutils literal"><span class="pre">bsondump</span></code></a></li><li class="toctree-l3"><a class="reference internal" href="reference/program/mongoimport.html"><code class="docutils literal"><span class="pre">mongoimport</span></code></a></li><li class="toctree-l3"><a class="reference internal" href="reference/program/mongoexport.html"><code class="docutils literal"><span class="pre">mongoexport</span></code></a></li><li class="toctree-l3"><a class="reference internal" href="reference/program/mongostat.html"><code class="docutils literal"><span class="pre">mongostat</span></code></a></li><li class="toctree-l3"><a class="reference internal" href="reference/program/mongotop.html"><code class="docutils literal"><span class="pre">mongotop</span></code></a></li><li class="toctree-l3"><a class="reference internal" href="reference/program/mongoreplay.html"><code class="docutils literal"><span class="pre">mongoreplay</span></code></a></li><li class="toctree-l3"><a class="reference internal" href="reference/program/mongoldap.html"><code class="docutils literal"><span class="pre">mongoldap</span></code></a></li><li class="toctree-l3"><a class="reference internal" href="reference/program/mongofiles.html"><code class="docutils literal"><span class="pre">mongofiles</span></code></a></li><li class="toctree-l3"><a class="reference internal" href="reference/program/install_compass.html"><code class="docutils literal"><span class="pre">install_compass</span></code></a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="reference/configuration-options.html">Configuration File Options</a><ul><li class="toctree-l3"><a class="reference internal" href="reference/expansion-directives.html">Externally Sourced Configuration File Values</a></li><li class="toctree-l3"><a class="reference internal" href="tutorial/convert-command-line-options-to-yaml.html">Convert Command-Line Options to YAML</a></li><li class="toctree-l3"><a class="reference internal" href="reference/configuration-file-settings-command-line-options-mapping.html">Configuration File Settings and Command-Line Options Mapping</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="reference/parameters.html">MongoDB Server Parameters</a></li><li class="toctree-l2"><a class="reference internal" href="reference/limits.html">MongoDB Limits and Thresholds</a></li><li class="toctree-l2"><a class="reference internal" href="reference/explain-results.html">Explain Results</a></li><li class="toctree-l2"><a class="reference internal" href="reference/system-collections.html">System Collections</a></li><li class="toctree-l2"><a class="reference internal" href="reference/connection-string.html">Connection String URI Format</a></li><li class="toctree-l2"><a class="reference internal" href="reference/collation.html">Collation</a><ul><li class="toctree-l3"><a class="reference internal" href="reference/collation-locales-defaults.html">Collation Locales and Default Parameters</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="reference/mongodb-wire-protocol.html">MongoDB Wire Protocol</a></li><li class="toctree-l2"><a class="reference internal" href="reference/log-messages.html">Log Messages</a></li><li class="toctree-l2"><a class="reference internal" href="reference/exit-codes.html">Exit Codes and Statuses</a></li><li class="toctree-l2"><a class="reference internal" href="reference/glossary.html">Glossary</a></li><li class="toctree-l2"><a class="reference internal" href="reference/default-mongodb-port.html">Default MongoDB Port</a></li><li class="toctree-l2"><a class="reference internal" href="reference/server-sessions.html">Server Sessions</a></li></ul></li><li class="toctree-l1"><a class="reference internal" href="release-notes.html">Release Notes</a><ul><li class="toctree-l2"><a class="reference internal" href="release-notes/4.2.html">Release Notes for MongoDB 4.2</a><ul><li class="toctree-l3"><a class="reference internal" href="release-notes/4.2-compatibility.html">Compatibility Changes in MongoDB 4.2</a></li><li class="toctree-l3"><a class="reference internal" href="release-notes/4.2-upgrade-standalone.html">Upgrade a Standalone to 4.2</a></li><li class="toctree-l3"><a class="reference internal" href="release-notes/4.2-upgrade-replica-set.html">Upgrade a Replica Set to 4.2</a></li><li class="toctree-l3"><a class="reference internal" href="release-notes/4.2-upgrade-sharded-cluster.html">Upgrade a Sharded Cluster to 4.2</a></li><li class="toctree-l3"><a class="reference internal" href="release-notes/4.2-downgrade.html">Downgrade 4.2 to 4.0</a><ul><li class="toctree-l4"><a class="reference internal" href="release-notes/4.2-downgrade-standalone.html">Downgrade 4.2 Standalone to 4.0</a></li><li class="toctree-l4"><a class="reference internal" href="release-notes/4.2-downgrade-replica-set.html">Downgrade 4.2 Replica Set to 4.0</a></li><li class="toctree-l4"><a class="reference internal" href="release-notes/4.2-downgrade-sharded-cluster.html">Downgrade 4.2 Sharded Cluster to 4.0</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="release-notes/4.2-changelog.html">4.2 Changelog</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="release-notes/4.0.html">Release Notes for MongoDB 4.0</a><ul><li class="toctree-l3"><a class="reference internal" href="release-notes/4.0-compatibility.html">Compatibility Changes in MongoDB 4.0</a></li><li class="toctree-l3"><a class="reference internal" href="release-notes/4.0-upgrade-standalone.html">Upgrade a Standalone to 4.0</a></li><li class="toctree-l3"><a class="reference internal" href="release-notes/4.0-upgrade-replica-set.html">Upgrade a Replica Set to 4.0</a></li><li class="toctree-l3"><a class="reference internal" href="release-notes/4.0-upgrade-sharded-cluster.html">Upgrade a Sharded Cluster to 4.0</a></li><li class="toctree-l3"><a class="reference internal" href="release-notes/4.0-downgrade-standalone.html">Downgrade 4.0 Standalone to 3.6</a></li><li class="toctree-l3"><a class="reference internal" href="release-notes/4.0-downgrade-replica-set.html">Downgrade 4.0 Replica Set to 3.6</a></li><li class="toctree-l3"><a class="reference internal" href="release-notes/4.0-downgrade-sharded-cluster.html">Downgrade 4.0 Sharded Cluster to 3.6</a></li><li class="toctree-l3"><a class="reference internal" href="release-notes/4.0-changelog.html">4.0 Changelog</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="release-notes/3.6.html">Release Notes for MongoDB 3.6</a><ul><li class="toctree-l3"><a class="reference internal" href="release-notes/3.6-changelog.html">3.6 Changelog</a></li><li class="toctree-l3"><a class="reference internal" href="release-notes/3.6-compatibility.html">Compatibility Changes in MongoDB 3.6</a></li><li class="toctree-l3"><a class="reference internal" href="release-notes/3.6-upgrade-standalone.html">Upgrade a Standalone to 3.6</a></li><li class="toctree-l3"><a class="reference internal" href="release-notes/3.6-upgrade-replica-set.html">Upgrade a Replica Set to 3.6</a></li><li class="toctree-l3"><a class="reference internal" href="release-notes/3.6-upgrade-sharded-cluster.html">Upgrade a Sharded Cluster to 3.6</a></li><li class="toctree-l3"><a class="reference internal" href="release-notes/3.6-downgrade-standalone.html">Downgrade 3.6 Standalone to 3.4</a></li><li class="toctree-l3"><a class="reference internal" href="release-notes/3.6-downgrade-replica-set.html">Downgrade 3.6 Replica Set to 3.4</a></li><li class="toctree-l3"><a class="reference internal" href="release-notes/3.6-downgrade-sharded-cluster.html">Downgrade 3.6 Sharded Cluster to 3.4</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="release-notes/3.4.html">Release Notes for MongoDB 3.4</a><ul><li class="toctree-l3"><a class="reference internal" href="release-notes/3.4-changelog.html">3.4 Changelog</a></li><li class="toctree-l3"><a class="reference internal" href="release-notes/3.4-compatibility.html">Compatibility Changes in MongoDB 3.4</a></li><li class="toctree-l3"><a class="reference internal" href="release-notes/3.4-upgrade-standalone.html">Upgrade a Standalone to 3.4</a></li><li class="toctree-l3"><a class="reference internal" href="release-notes/3.4-upgrade-replica-set.html">Upgrade a Replica Set to 3.4</a></li><li class="toctree-l3"><a class="reference internal" href="release-notes/3.4-upgrade-sharded-cluster.html">Upgrade a Sharded Cluster to 3.4</a></li><li class="toctree-l3"><a class="reference internal" href="release-notes/3.4-downgrade.html">Downgrade MongoDB 3.4 to 3.2</a><ul><li class="toctree-l4"><a class="reference internal" href="release-notes/3.4-downgrade-standalone.html">Downgrade 3.4 Standalone to 3.2</a></li><li class="toctree-l4"><a class="reference internal" href="release-notes/3.4-downgrade-replica-set.html">Downgrade 3.4 Replica Set to 3.2</a></li><li class="toctree-l4"><a class="reference internal" href="release-notes/3.4-downgrade-sharded-cluster.html">Downgrade 3.4 Sharded Cluster to 3.2</a></li></ul></li></ul></li><li class="toctree-l2"><a class="reference internal" href="release-notes/3.2.html">Release Notes for MongoDB 3.2</a><ul><li class="toctree-l3"><a class="reference internal" href="release-notes/3.2-changelog.html">3.2 Changelog</a></li><li class="toctree-l3"><a class="reference internal" href="release-notes/3.2-compatibility.html">Compatibility Changes in MongoDB 3.2</a><ul><li class="toctree-l4"><a class="reference internal" href="release-notes/3.2-javascript.html">JavaScript Changes in MongoDB 3.2</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="release-notes/3.2-upgrade.html">Upgrade MongoDB to 3.2</a></li><li class="toctree-l3"><a class="reference internal" href="release-notes/3.2-downgrade.html">Downgrade MongoDB from 3.2</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="release-notes/3.0.html">Release Notes for MongoDB 3.0</a><ul><li class="toctree-l3"><a class="reference internal" href="release-notes/3.0-changelog.html">3.0 Changelog</a></li><li class="toctree-l3"><a class="reference internal" href="release-notes/3.0-compatibility.html">Compatibility Changes in MongoDB 3.0</a></li><li class="toctree-l3"><a class="reference internal" href="release-notes/3.0-upgrade.html">Upgrade MongoDB to 3.0</a></li><li class="toctree-l3"><a class="reference internal" href="release-notes/3.0-scram.html">Upgrade to SCRAM</a></li><li class="toctree-l3"><a class="reference internal" href="release-notes/3.0-downgrade.html">Downgrade MongoDB from 3.0</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="release-notes/2.6.html">Release Notes for MongoDB 2.6</a><ul><li class="toctree-l3"><a class="reference internal" href="release-notes/2.6-changelog.html">2.6 Changelog</a></li><li class="toctree-l3"><a class="reference internal" href="release-notes/2.6-compatibility.html">Compatibility Changes in MongoDB 2.6</a></li><li class="toctree-l3"><a class="reference internal" href="release-notes/2.6-upgrade.html">Upgrade MongoDB to 2.6</a></li><li class="toctree-l3"><a class="reference internal" href="release-notes/2.6-upgrade-authorization.html">Upgrade User Authorization Data to 2.6 Format</a></li><li class="toctree-l3"><a class="reference internal" href="release-notes/2.6-downgrade.html">Downgrade MongoDB from 2.6</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="release-notes/2.4.html">Release Notes for MongoDB 2.4</a><ul><li class="toctree-l3"><a class="reference internal" href="release-notes/2.4-changelog.html">2.4 Changelog</a></li><li class="toctree-l3"><a class="reference internal" href="release-notes/2.4-javascript.html">JavaScript Changes in MongoDB 2.4</a></li><li class="toctree-l3"><a class="reference internal" href="release-notes/2.4-upgrade.html">Upgrade MongoDB to 2.4</a></li><li class="toctree-l3"><a class="reference internal" href="release-notes/2.4-index-types.html">Compatibility and Index Type Changes in MongoDB 2.4</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="release-notes/2.2.html">Release Notes for MongoDB 2.2</a></li><li class="toctree-l2"><a class="reference internal" href="release-notes/2.0.html">Release Notes for MongoDB 2.0</a></li><li class="toctree-l2"><a class="reference internal" href="release-notes/1.8.html">Release Notes for MongoDB 1.8</a></li><li class="toctree-l2"><a class="reference internal" href="release-notes/1.6.html">Release Notes for MongoDB 1.6</a></li><li class="toctree-l2"><a class="reference internal" href="release-notes/1.4.html">Release Notes for MongoDB 1.4</a></li><li class="toctree-l2"><a class="reference internal" href="release-notes/1.2.html">Release Notes for MongoDB 1.2.x</a></li><li class="toctree-l2"><a class="reference internal" href="reference/versioning.html">MongoDB Versioning</a></li></ul></li><li class="toctree-l1"><a class="reference internal" href="support.html">Technical Support</a></li></ul>


    </div>
  </div>
           
         </aside>

   </div>

    <div id="main-column" class="main-column">

    <span id="showNav" class="showNav">Navigation</span>

      
        <div class="document">
            <div class="documentwrapper"><div class="bodywrapper">
              <div class="body" data-pagename="changeStreams">
                   <a class="edit-link" href="https://github.com/mongodb/docs/blob/v4.2/source/changeStreams.txt" target="_blank" title="Edit changeStreams.txt on GitHub">
    
      <span class="icon-edit"></span>
    
  </a>
                

                
  <div class="bc">
    
      
    
    
  </div>
                
                  <div class="section" id="change-streams">
<span id="collection-watch"></span><span id="changestreams"></span><span id="index-0"></span><h1>Change Streams<a class="headerlink" href="#change-streams" title="Permalink to this headline">¶</a></h1>
<div class="contents twocols local topic" id="on-this-page">
<p class="topic-title first">On this page</p>
<ul class="simple">
<li><a class="reference internal" href="#availability" id="id2">Availability</a></li>
<li><a class="reference internal" href="#watch-collection-database-deployment" id="id3">Watch Collection/Database/Deployment</a></li>
<li><a class="reference internal" href="#open-a-change-stream" id="id4">Open A Change Stream</a></li>
<li><a class="reference internal" href="#modify-change-stream-output" id="id5">Modify Change Stream Output</a></li>
<li><a class="reference internal" href="#lookup-full-document-for-update-operations" id="id6">Lookup Full Document for Update Operations</a></li>
<li><a class="reference internal" href="#resume-a-change-stream" id="id7">Resume a Change Stream</a></li>
<li><a class="reference internal" href="#use-cases" id="id8">Use Cases</a></li>
<li><a class="reference internal" href="#access-control" id="id9">Access Control</a></li>
<li><a class="reference internal" href="#event-notification" id="id10">Event Notification</a></li>
<li><a class="reference internal" href="#collation" id="id11">Collation</a></li>
</ul>
</div>
<div class="versionadded">
<p><span class="versionmodified">New in version 3.6.</span></p>
</div>
<p>Change streams allow applications to access real-time data changes
without the complexity and risk of tailing the <a class="reference internal" href="reference/glossary.html#term-oplog"><span class="xref std std-term">oplog</span></a>.
Applications can use change streams to subscribe to all data changes on
a single collection, a database, or an entire deployment, and
immediately react to them. Because change streams use the aggregation
framework, applications can also filter for specific changes or
transform the notifications at will.</p>
<div class="section" id="availability">
<h2>Availability<a class="headerlink" href="#availability" title="Permalink to this headline">¶</a></h2>
<p>Change streams are available for <a class="reference internal" href="replication.html"><span class="doc">replica sets</span></a> and
<a class="reference internal" href="sharding.html"><span class="doc">sharded clusters</span></a>:</p>
<ul>
<li><p class="first"><strong>Storage Engine.</strong></p>
<p>The replica sets and sharded clusters must use the <a class="reference internal" href="core/wiredtiger.html#storage-wiredtiger"><span class="std std-ref">WiredTiger</span></a> storage engine. Change streams can also be used
on deployments that employ MongoDB’s
<a class="reference internal" href="core/security-encryption-at-rest.html#encrypted-storage-engine"><span class="std std-ref">encryption-at-rest</span></a> feature.</p>
</li>
<li><p class="first"><strong>Replica Set Protocol Version.</strong></p>
<p>The replica sets and sharded clusters must use replica set protocol
version 1 (<a class="reference internal" href="reference/replica-configuration.html#rsconf.protocolVersion" title="protocolVersion"><code class="xref mongodb mongodb-rsconf docutils literal"><span class="pre">pv1</span></code></a>).</p>
</li>
<li><p class="first"><strong>Read Concern “majority” Enablement.</strong></p>
<p>Starting in MongoDB 4.2, <a class="reference internal" href="#"><span class="doc">change streams</span></a> are
available regardless of the <a class="reference internal" href="reference/read-concern-majority.html#readconcern.&quot;majority&quot;" title="&quot;majority&quot;"><code class="xref mongodb mongodb-readconcern docutils literal"><span class="pre">&quot;majority&quot;</span></code></a> read concern
support; that is, read concern <code class="docutils literal"><span class="pre">majority</span></code> support can be either
enabled (default) or <a class="reference internal" href="reference/read-concern-majority.html#disable-read-concern-majority"><span class="std std-ref">disabled</span></a>
to use change streams.</p>
<p>In MongoDB 4.0 and earlier, <a class="reference internal" href="#"><span class="doc">change streams</span></a> are
available only if <a class="reference internal" href="reference/read-concern-majority.html#readconcern.&quot;majority&quot;" title="&quot;majority&quot;"><code class="xref mongodb mongodb-readconcern docutils literal"><span class="pre">&quot;majority&quot;</span></code></a> read concern support is
enabled (default).</p>
</li>
</ul>
</div>
<div class="section" id="watch-collection-database-deployment">
<h2>Watch Collection/Database/Deployment<a class="headerlink" href="#watch-collection-database-deployment" title="Permalink to this headline">¶</a></h2>
<p>You can open change streams against:</p>
<table border="1" class="colwidths-given docutils">
<colgroup>
<col width="15%" />
<col width="85%" />
</colgroup>
<thead valign="bottom">
<tr class="row-odd"><th class="head">Target</th>
<th class="head">Description</th>
</tr>
</thead>
<tbody valign="top">
<tr class="row-even"><td>A collection</td>
<td><p class="first">You can open a change stream cursor for a single collection
(except <code class="docutils literal"><span class="pre">system</span></code> collections, or any collections in the
<code class="docutils literal"><span class="pre">admin</span></code>, <code class="docutils literal"><span class="pre">local</span></code>, and <code class="docutils literal"><span class="pre">config</span></code> databases).</p>
<p class="last">The examples on this page use the MongoDB drivers to open and
work with a change stream cursor for a single collection. See
also the <a class="reference internal" href="reference/program/mongo.html#bin.mongo" title="bin.mongo"><code class="xref mongodb mongodb-binary docutils literal"><span class="pre">mongo</span></code></a> shell method
<a class="reference internal" href="reference/method/db.collection.watch.html#db.collection.watch" title="db.collection.watch()"><code class="xref mongodb mongodb-method docutils literal"><span class="pre">db.collection.watch()</span></code></a>.</p>
</td>
</tr>
<tr class="row-odd"><td>A database</td>
<td><p class="first">Starting in MongoDB 4.0, you can open a change stream cursor for
a single database (excluding <code class="docutils literal"><span class="pre">admin</span></code>, <code class="docutils literal"><span class="pre">local</span></code>, and
<code class="docutils literal"><span class="pre">config</span></code> database) to watch for changes to all its non-system
collections.</p>
<p class="last">For the MongoDB driver method, refer to your driver
documentation. See also the <a class="reference internal" href="reference/program/mongo.html#bin.mongo" title="bin.mongo"><code class="xref mongodb mongodb-binary docutils literal"><span class="pre">mongo</span></code></a> shell method
<a class="reference internal" href="reference/method/db.watch.html#db.watch" title="db.watch()"><code class="xref mongodb mongodb-method docutils literal"><span class="pre">db.watch()</span></code></a>.</p>
</td>
</tr>
<tr class="row-even"><td>A deployment</td>
<td><p class="first">Starting in MongoDB 4.0, you can open a change stream cursor for
a deployment (either a replica set or a sharded cluster) to
watch for changes to all non-system collections across all
databases except for <code class="docutils literal"><span class="pre">admin</span></code>, <code class="docutils literal"><span class="pre">local</span></code>, and <code class="docutils literal"><span class="pre">config</span></code>.</p>
<p class="last">For the MongoDB driver method, refer to your driver
documentation. See also the <a class="reference internal" href="reference/program/mongo.html#bin.mongo" title="bin.mongo"><code class="xref mongodb mongodb-binary docutils literal"><span class="pre">mongo</span></code></a> shell method
<a class="reference internal" href="reference/method/Mongo.watch.html#Mongo.watch" title="Mongo.watch()"><code class="xref mongodb mongodb-method docutils literal"><span class="pre">Mongo.watch()</span></code></a>.</p>
</td>
</tr>
</tbody>
</table>
<div class="note admonition">
<p class="first admonition-title">Change Stream Examples</p>
<p class="last">The examples on this page use the MongoDB drivers to illustrate how
to open a change stream cursor for a collection and work with the
change stream cursor.</p>
</div>
</div>
<div class="section" id="open-a-change-stream">
<span id="open-change-stream"></span><h2>Open A Change Stream<a class="headerlink" href="#open-a-change-stream" title="Permalink to this headline">¶</a></h2>
<div class="docutils container">
<ul class="guide__pills pillstrip-declaration" role="tablist" data-tab-preference="languages"></ul><p>To open a change stream:</p>
<ul class="simple">
<li>For a replica set, you can issue the open change stream operation
from any of the data-bearing members.</li>
<li>For a sharded cluster, you must issue the open change stream
operation from the <a class="reference internal" href="reference/program/mongos.html#bin.mongos" title="bin.mongos"><code class="xref mongodb mongodb-binary docutils literal"><span class="pre">mongos</span></code></a>.</li>
</ul>
<p>The following example opens a change stream for a collection and
iterates over the cursor to retrieve the change stream documents.
<a class="footnote-reference" href="#start-time" id="id1">[1]</a></p>
<div class="tabs" data-tab-preference="languages">
  <ul class="tab-strip tab-strip--singleton" role="tablist">
    <li class="tab-strip__element" data-tabid="python" role="tab" aria-selected="true">Python</li>
    <li class="tab-strip__element" data-tabid="javasync" role="tab" aria-selected="false">Java (Sync)</li>
    <li class="tab-strip__element" data-tabid="nodejs" role="tab" aria-selected="false">Node.js</li>
    <li class="tab-strip__element" data-tabid="php" role="tab" aria-selected="false">PHP</li>
    <li class="tab-strip__element" data-tabid="motor" role="tab" aria-selected="false">Motor</li>
    <li class="tab-strip__element dropdown">
      <a class="dropdown-toggle" data-toggle="dropdown">Other <span class="caret"></span></a>
      <ul class="dropdown-menu tab-strip__dropdown" role="menu">
        <li data-tabid="c" aria-selected="false">C</li>
        <li data-tabid="csharp" aria-selected="false">C#</li>
        <li data-tabid="ruby" aria-selected="false">Ruby</li>
        <li data-tabid="go" aria-selected="false">Go</li>
      </ul>
    </li>
  </ul>
  <div class="tabs__content" role="tabpanel">
    <div class="tabpanel-python" data-tabid="python"><p>The Python examples below assume that you have <a class="reference external" href="http://api.mongodb.com/python/current/tutorial.html#making-a-connection-with-mongoclient/">connected to a MongoDB replica set and have accessed a database</a>
that contains an <code class="docutils literal"><span class="pre">inventory</span></code> collection.</p>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-python"><div class="highlight"><pre><span></span><span class="n">cursor</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">inventory</span><span class="o">.</span><span class="n">watch</span><span class="p">()</span>
<span class="n">document</span> <span class="o">=</span> <span class="nb">next</span><span class="p">(</span><span class="n">cursor</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
<div class="tabpanel-javasync" data-tabid="javasync"><p>The Java examples below assume that you have <a class="reference external" href="http://mongodb.github.io/mongo-java-driver/3.6/driver/tutorials/databases-collections/">connected to a MongoDB replica set and have accessed a database</a>
that contains an <code class="docutils literal"><span class="pre">inventory</span></code> collection.</p>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-java"><div class="highlight"><pre><span></span><span class="n">MongoCursor</span><span class="o">&lt;</span><span class="n">ChangeStreamDocument</span><span class="o">&lt;</span><span class="n">Document</span><span class="o">&gt;&gt;</span> <span class="n">cursor</span> <span class="o">=</span> <span class="n">inventory</span><span class="o">.</span><span class="na">watch</span><span class="o">().</span><span class="na">iterator</span><span class="o">();</span>
<span class="n">ChangeStreamDocument</span><span class="o">&lt;</span><span class="n">Document</span><span class="o">&gt;</span> <span class="n">next</span> <span class="o">=</span> <span class="n">cursor</span><span class="o">.</span><span class="na">next</span><span class="o">();</span>
</pre></div>
</div>
</div>
</div>
<div class="tabpanel-nodejs" data-tabid="nodejs"><p>The Node.js examples below assume that you have <a class="reference external" href="https://mongodb.github.io/node-mongodb-native/api-generated/mongoclient.html#connect">connected to a MongoDB replica set and have accessed a database</a>
that contains an <code class="docutils literal"><span class="pre">inventory</span></code> collection.</p>
<p>The following example uses stream to process the change events.</p>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-javascript"><div class="highlight"><pre><span></span><span class="kr">const</span> <span class="nx">collection</span> <span class="o">=</span> <span class="nx">db</span><span class="p">.</span><span class="nx">collection</span><span class="p">(</span><span class="s1">&#39;inventory&#39;</span><span class="p">);</span>
<span class="kr">const</span> <span class="nx">changeStream</span> <span class="o">=</span> <span class="nx">collection</span><span class="p">.</span><span class="nx">watch</span><span class="p">();</span>
<span class="nx">changeStream</span><span class="p">.</span><span class="nx">on</span><span class="p">(</span><span class="s1">&#39;change&#39;</span><span class="p">,</span> <span class="nx">next</span> <span class="p">=&gt;</span> <span class="p">{</span>
  <span class="c1">// process next document</span>
<span class="p">});</span>
</pre></div>
</div>
</div>
<p>Alternatively, you can also use iterator to process the change events:</p>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-javascript"><div class="highlight"><pre><span></span><span class="kr">const</span> <span class="nx">changeStreamIterator</span> <span class="o">=</span> <span class="nx">collection</span><span class="p">.</span><span class="nx">watch</span><span class="p">();</span>
<span class="kr">const</span> <span class="nx">next</span> <span class="o">=</span> <span class="nx">await</span> <span class="nx">changeStreamIterator</span><span class="p">.</span><span class="nx">next</span><span class="p">();</span>
</pre></div>
</div>
</div>
</div>
<div class="tabpanel-php" data-tabid="php"><p>The examples below assume that you have <a class="reference external" href="https://docs.mongodb.com/php-library/current/reference/method/MongoDBClient__construct/">connected to a MongoDB replica  set and have accessed a database</a>
that contains an <code class="docutils literal"><span class="pre">inventory</span></code> collection.</p>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-php"><div class="highlight"><pre><span></span><span class="nv">$changeStream</span> <span class="o">=</span> <span class="nv">$db</span><span class="o">-&gt;</span><span class="na">inventory</span><span class="o">-&gt;</span><span class="na">watch</span><span class="p">();</span>
<span class="nv">$changeStream</span><span class="o">-&gt;</span><span class="na">rewind</span><span class="p">();</span>

<span class="nv">$firstChange</span> <span class="o">=</span> <span class="nv">$changeStream</span><span class="o">-&gt;</span><span class="na">current</span><span class="p">();</span>

<span class="nv">$changeStream</span><span class="o">-&gt;</span><span class="na">next</span><span class="p">();</span>

<span class="nv">$secondChange</span> <span class="o">=</span> <span class="nv">$changeStream</span><span class="o">-&gt;</span><span class="na">current</span><span class="p">();</span>
</pre></div>
</div>
</div>
</div>
<div class="tabpanel-motor" data-tabid="motor"><p>The examples below assume that you have <a class="reference external" href="https://motor.readthedocs.io/en/stable/tutorial-asyncio.html#creating-a-client">connected to a MongoDB replica set and have accessed a database</a>
that contains an <code class="docutils literal"><span class="pre">inventory</span></code> collection.</p>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-python"><div class="highlight"><pre><span></span><span class="n">cursor</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">inventory</span><span class="o">.</span><span class="n">watch</span><span class="p">()</span>
<span class="n">document</span> <span class="o">=</span> <span class="n">await</span> <span class="n">cursor</span><span class="o">.</span><span class="n">next</span><span class="p">()</span>
</pre></div>
</div>
</div>
</div>
<div class="tabpanel-c" data-tabid="c"><p>The C examples below assume that you have <a class="reference external" href="http://mongoc.org/libmongoc/current/tutorial.html#making-a-connection/">connected to a MongoDB replica set and have accessed a database</a>
that contains an <code class="docutils literal"><span class="pre">inventory</span></code> collection.</p>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-c"><div class="highlight"><pre><span></span><span class="n">mongoc_collection_t</span> <span class="o">*</span><span class="n">collection</span><span class="p">;</span>
<span class="n">bson_t</span> <span class="o">*</span><span class="n">pipeline</span> <span class="o">=</span> <span class="n">bson_new</span> <span class="p">();</span>
<span class="n">bson_t</span> <span class="n">opts</span> <span class="o">=</span> <span class="n">BSON_INITIALIZER</span><span class="p">;</span>
<span class="n">mongoc_change_stream_t</span> <span class="o">*</span><span class="n">stream</span><span class="p">;</span>
<span class="k">const</span> <span class="n">bson_t</span> <span class="o">*</span><span class="n">change</span><span class="p">;</span>
<span class="k">const</span> <span class="n">bson_t</span> <span class="o">*</span><span class="n">resume_token</span><span class="p">;</span>
<span class="n">bson_error_t</span> <span class="n">error</span><span class="p">;</span>

<span class="n">collection</span> <span class="o">=</span> <span class="n">mongoc_database_get_collection</span> <span class="p">(</span><span class="n">db</span><span class="p">,</span> <span class="s">&quot;inventory&quot;</span><span class="p">);</span>
<span class="n">stream</span> <span class="o">=</span> <span class="n">mongoc_collection_watch</span> <span class="p">(</span><span class="n">collection</span><span class="p">,</span> <span class="n">pipeline</span><span class="p">,</span> <span class="nb">NULL</span> <span class="cm">/* opts */</span><span class="p">);</span>
<span class="n">mongoc_change_stream_next</span> <span class="p">(</span><span class="n">stream</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">change</span><span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="n">mongoc_change_stream_error_document</span> <span class="p">(</span><span class="n">stream</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">error</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">))</span> <span class="p">{</span>
   <span class="n">MONGOC_ERROR</span> <span class="p">(</span><span class="s">&quot;%s</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">,</span> <span class="n">error</span><span class="p">.</span><span class="n">message</span><span class="p">);</span>
<span class="p">}</span>

<span class="n">mongoc_change_stream_destroy</span> <span class="p">(</span><span class="n">stream</span><span class="p">);</span>
</pre></div>
</div>
</div>
</div>
<div class="tabpanel-csharp" data-tabid="csharp"><p>The C# examples below assume that you have <a class="reference external" href="http://mongodb.github.io/mongo-csharp-driver/2.4/getting_started/quick_tour/#make-a-connection/">connected to a MongoDB replica set and have accessed a database</a>
that contains an <code class="docutils literal"><span class="pre">inventory</span></code> collection.</p>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-c#"><div class="highlight"><pre><span></span><span class="kt">var</span> <span class="n">cursor</span> <span class="p">=</span> <span class="n">inventory</span><span class="p">.</span><span class="n">Watch</span><span class="p">();</span>
<span class="k">while</span> <span class="p">(</span><span class="n">cursor</span><span class="p">.</span><span class="n">MoveNext</span><span class="p">()</span> <span class="p">&amp;&amp;</span> <span class="n">cursor</span><span class="p">.</span><span class="n">Current</span><span class="p">.</span><span class="n">Count</span><span class="p">()</span> <span class="p">==</span> <span class="m">0</span><span class="p">)</span> <span class="p">{</span> <span class="p">}</span> <span class="c1">// keep calling MoveNext until we&#39;ve read the first batch</span>
<span class="kt">var</span> <span class="n">next</span> <span class="p">=</span> <span class="n">cursor</span><span class="p">.</span><span class="n">Current</span><span class="p">.</span><span class="n">First</span><span class="p">();</span>
<span class="n">cursor</span><span class="p">.</span><span class="n">Dispose</span><span class="p">();</span>
</pre></div>
</div>
</div>
</div>
<div class="tabpanel-ruby" data-tabid="ruby"><p>The examples below assume that you have <a class="reference external" href="https://docs.mongodb.com/ruby-driver/master/tutorials/ruby-driver-create-client/">connected to a MongoDB replica set and have accessed a database</a>
that contains an <code class="docutils literal"><span class="pre">inventory</span></code> collection.</p>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-ruby"><div class="highlight"><pre><span></span><span class="n">cursor</span> <span class="o">=</span> <span class="n">inventory</span><span class="o">.</span><span class="n">watch</span><span class="o">.</span><span class="n">to_enum</span>
<span class="n">next_change</span> <span class="o">=</span> <span class="n">cursor</span><span class="o">.</span><span class="n">next</span>
</pre></div>
</div>
</div>
</div>
<div class="tabpanel-go" data-tabid="go"><p>The Go examples below assume that you have <a class="reference external" href="https://godoc.org/go.mongodb.org/mongo-driver/mongo#NewClient/">connected to a MongoDB replica set and have accessed a database</a>
that contains an <code class="docutils literal"><span class="pre">inventory</span></code> collection.</p>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-go"><div class="highlight"><pre><span></span><span class="nx">cs</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">coll</span><span class="p">.</span><span class="nx">Watch</span><span class="p">(</span><span class="nx">ctx</span><span class="p">,</span> <span class="nx">mongo</span><span class="p">.</span><span class="nx">Pipeline</span><span class="p">{})</span>
<span class="nx">require</span><span class="p">.</span><span class="nx">NoError</span><span class="p">(</span><span class="nx">t</span><span class="p">,</span> <span class="nx">err</span><span class="p">)</span>
<span class="k">defer</span> <span class="nx">cs</span><span class="p">.</span><span class="nx">Close</span><span class="p">(</span><span class="nx">ctx</span><span class="p">)</span>

<span class="nx">ok</span> <span class="o">:=</span> <span class="nx">cs</span><span class="p">.</span><span class="nx">Next</span><span class="p">(</span><span class="nx">ctx</span><span class="p">)</span>
<span class="nx">next</span> <span class="o">:=</span> <span class="nx">cs</span><span class="p">.</span><span class="nx">Current</span>
</pre></div>
</div>
</div>
    </div>
  </div>
</div><p>To retrieve the <a class="reference internal" href="reference/change-events.html#change-stream-output"><span class="std std-ref">data change event</span></a> from
the cursor, iterate the change stream cursor. For information on the
change stream event, see <a class="reference internal" href="reference/change-events.html#change-stream-output"><span class="std std-ref">Change Events</span></a>.</p>
<p>While the connection to the MongoDB deployment remains
open, the cursor remains open until one of the following occurs:</p>
<ul class="simple">
<li>The cursor is explicitly closed.</li>
<li>An <a class="reference internal" href="reference/change-events.html#change-event-invalidate"><span class="std std-ref">invalidate event</span></a> occurs.</li>
<li>If the deployment is a sharded cluster, a shard removal may cause an
open change stream cursor to close, and the closed change stream cursor may
not be fully resumable.</li>
</ul>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">The lifecycle of an unclosed cursor is language-dependent.</p>
</div>
</div>
<table class="docutils footnote" frame="void" id="start-time" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#id1">[1]</a></td><td>Starting in MongoDB 4.0, you can specify a <code class="docutils literal"><span class="pre">startAtOperationTime</span></code>
to open the cursor at a particular point in time. If the specified
starting point is in the past, it must be in the time range of the
oplog.</td></tr>
</tbody>
</table>
</div>
<div class="section" id="modify-change-stream-output">
<span id="change-stream-modify-output"></span><h2>Modify Change Stream Output<a class="headerlink" href="#modify-change-stream-output" title="Permalink to this headline">¶</a></h2>
<div class="docutils container">
<ul class="guide__pills pillstrip-declaration" role="tablist" data-tab-preference="languages"></ul><div class="tabs" data-tab-preference="languages">
  <ul class="tab-strip tab-strip--singleton" role="tablist">
    <li class="tab-strip__element" data-tabid="python" role="tab" aria-selected="true">Python</li>
    <li class="tab-strip__element" data-tabid="javasync" role="tab" aria-selected="false">Java (Sync)</li>
    <li class="tab-strip__element" data-tabid="nodejs" role="tab" aria-selected="false">Node.js</li>
    <li class="tab-strip__element" data-tabid="php" role="tab" aria-selected="false">PHP</li>
    <li class="tab-strip__element" data-tabid="motor" role="tab" aria-selected="false">Motor</li>
    <li class="tab-strip__element dropdown">
      <a class="dropdown-toggle" data-toggle="dropdown">Other <span class="caret"></span></a>
      <ul class="dropdown-menu tab-strip__dropdown" role="menu">
        <li data-tabid="c" aria-selected="false">C</li>
        <li data-tabid="csharp" aria-selected="false">C#</li>
        <li data-tabid="ruby" aria-selected="false">Ruby</li>
        <li data-tabid="go" aria-selected="false">Go</li>
      </ul>
    </li>
  </ul>
  <div class="tabs__content" role="tabpanel">
    <div class="tabpanel-python" data-tabid="python"><p>You can control <a class="reference internal" href="reference/change-events.html#change-stream-output"><span class="std std-ref">change stream output</span></a> by
providing an array of one or more of the following pipeline stages when
configuring the change stream:</p>
<ul class="simple">
<li><a class="reference internal" href="reference/operator/aggregation/addFields.html#pipe._S_addFields" title="$addFields"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$addFields</span></code></a></li>
<li><a class="reference internal" href="reference/operator/aggregation/match.html#pipe._S_match" title="$match"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$match</span></code></a></li>
<li><a class="reference internal" href="reference/operator/aggregation/project.html#pipe._S_project" title="$project"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$project</span></code></a></li>
<li><a class="reference internal" href="reference/operator/aggregation/replaceRoot.html#pipe._S_replaceRoot" title="$replaceRoot"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$replaceRoot</span></code></a></li>
<li><a class="reference internal" href="reference/operator/aggregation/replaceWith.html#pipe._S_replaceWith" title="$replaceWith"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$replaceWith</span></code></a> (Available starting in MongoDB 4.2)</li>
<li><a class="reference internal" href="reference/operator/aggregation/redact.html#pipe._S_redact" title="$redact"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$redact</span></code></a></li>
<li><a class="reference internal" href="reference/operator/aggregation/set.html#pipe._S_set" title="$set"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$set</span></code></a> (Available starting in MongoDB 4.2)</li>
<li><a class="reference internal" href="reference/operator/aggregation/unset.html#pipe._S_unset" title="$unset"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$unset</span></code></a> (Available starting in MongoDB 4.2)</li>
</ul>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-python"><div class="highlight"><pre><span></span><span class="n">pipeline</span> <span class="o">=</span> <span class="p">[</span>
    <span class="p">{</span><span class="s1">&#39;$match&#39;</span><span class="p">:</span> <span class="p">{</span><span class="s1">&#39;fullDocument.username&#39;</span><span class="p">:</span> <span class="s1">&#39;alice&#39;</span><span class="p">}},</span>
    <span class="p">{</span><span class="s1">&#39;$addFields&#39;</span><span class="p">:</span> <span class="p">{</span><span class="s1">&#39;newField&#39;</span><span class="p">:</span> <span class="s1">&#39;this is an added field!&#39;</span><span class="p">}}</span>
<span class="p">]</span>
<span class="n">cursor</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">inventory</span><span class="o">.</span><span class="n">watch</span><span class="p">(</span><span class="n">pipeline</span><span class="o">=</span><span class="n">pipeline</span><span class="p">)</span>
<span class="n">document</span> <span class="o">=</span> <span class="nb">next</span><span class="p">(</span><span class="n">cursor</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
<div class="tabpanel-javasync" data-tabid="javasync"><p>You can control <a class="reference internal" href="reference/change-events.html#change-stream-output"><span class="std std-ref">change stream output</span></a> by
providing an array of one or more of the following pipeline stages when
configuring the change stream:</p>
<ul class="simple">
<li><a class="reference internal" href="reference/operator/aggregation/addFields.html#pipe._S_addFields" title="$addFields"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$addFields</span></code></a></li>
<li><a class="reference internal" href="reference/operator/aggregation/match.html#pipe._S_match" title="$match"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$match</span></code></a></li>
<li><a class="reference internal" href="reference/operator/aggregation/project.html#pipe._S_project" title="$project"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$project</span></code></a></li>
<li><a class="reference internal" href="reference/operator/aggregation/replaceRoot.html#pipe._S_replaceRoot" title="$replaceRoot"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$replaceRoot</span></code></a></li>
<li><a class="reference internal" href="reference/operator/aggregation/replaceWith.html#pipe._S_replaceWith" title="$replaceWith"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$replaceWith</span></code></a> (Available starting in MongoDB 4.2)</li>
<li><a class="reference internal" href="reference/operator/aggregation/redact.html#pipe._S_redact" title="$redact"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$redact</span></code></a></li>
<li><a class="reference internal" href="reference/operator/aggregation/set.html#pipe._S_set" title="$set"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$set</span></code></a> (Available starting in MongoDB 4.2)</li>
<li><a class="reference internal" href="reference/operator/aggregation/unset.html#pipe._S_unset" title="$unset"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$unset</span></code></a> (Available starting in MongoDB 4.2)</li>
</ul>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-java"><div class="highlight"><pre><span></span><span class="n">MongoClient</span> <span class="n">mongoClient</span> <span class="o">=</span> <span class="k">new</span> <span class="n">MongoClient</span><span class="o">(</span> <span class="k">new</span> <span class="n">MongoClientURI</span><span class="o">(</span><span class="s">&quot;mongodb://host1:port1,host2:port2...&quot;</span><span class="o">));</span>

<span class="c1">// Select the MongoDB database and collection to open the change stream against</span>

<span class="n">MongoDatabase</span> <span class="n">db</span> <span class="o">=</span> <span class="n">mongoClient</span><span class="o">.</span><span class="na">getDatabase</span><span class="o">(</span><span class="s">&quot;myTargetDatabase&quot;</span><span class="o">);</span>

<span class="n">MongoCollection</span><span class="o">&lt;</span><span class="n">Document</span><span class="o">&gt;</span> <span class="n">collection</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="na">getCollection</span><span class="o">(</span><span class="s">&quot;myTargetCollection&quot;</span><span class="o">);</span>

<span class="c1">// Create $match pipeline stage.</span>
<span class="n">List</span><span class="o">&lt;</span><span class="n">Bson</span><span class="o">&gt;</span> <span class="n">pipeline</span> <span class="o">=</span> <span class="n">singletonList</span><span class="o">(</span><span class="n">Aggregates</span><span class="o">.</span><span class="na">match</span><span class="o">(</span><span class="n">Filters</span><span class="o">.</span><span class="na">or</span><span class="o">(</span>
    <span class="n">Document</span><span class="o">.</span><span class="na">parse</span><span class="o">(</span><span class="s">&quot;{&#39;fullDocument.username&#39;: &#39;alice&#39;}&quot;</span><span class="o">),</span>
    <span class="n">Filters</span><span class="o">.</span><span class="na">in</span><span class="o">(</span><span class="s">&quot;operationType&quot;</span><span class="o">,</span> <span class="n">asList</span><span class="o">(</span><span class="s">&quot;delete&quot;</span><span class="o">)))));</span>

<span class="c1">// Create the change stream cursor, passing the pipeline to the</span>
<span class="c1">// collection.watch() method</span>

<span class="n">MongoCursor</span><span class="o">&lt;</span><span class="n">Document</span><span class="o">&gt;</span> <span class="n">cursor</span> <span class="o">=</span> <span class="n">collection</span><span class="o">.</span><span class="na">watch</span><span class="o">(</span><span class="n">pipeline</span><span class="o">).</span><span class="na">iterator</span><span class="o">();</span>
</pre></div>
</div>
</div>
<p>The <code class="docutils literal"><span class="pre">pipeline</span></code> list includes a single <a class="reference internal" href="reference/operator/aggregation/match.html#pipe._S_match" title="$match"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$match</span></code></a> stage that
filters any operations where the <code class="docutils literal"><span class="pre">username</span></code> is <code class="docutils literal"><span class="pre">alice</span></code>, or
operations where the <code class="docutils literal"><span class="pre">operationType</span></code> is <code class="docutils literal"><span class="pre">delete</span></code>.</p>
<p>Passing the <code class="docutils literal"><span class="pre">pipeline</span></code> to the <a class="reference internal" href="reference/method/db.collection.watch.html#db.collection.watch" title="db.collection.watch()"><code class="xref mongodb mongodb-method docutils literal"><span class="pre">watch()</span></code></a> method directs the
change stream to return notifications after passing them through the
specified <code class="docutils literal"><span class="pre">pipeline</span></code>.</p>
</div>
<div class="tabpanel-nodejs" data-tabid="nodejs"><p>You can control <a class="reference internal" href="reference/change-events.html#change-stream-output"><span class="std std-ref">change stream output</span></a> by
providing an array of one or more of the following pipeline stages when
configuring the change stream:</p>
<ul class="simple">
<li><a class="reference internal" href="reference/operator/aggregation/addFields.html#pipe._S_addFields" title="$addFields"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$addFields</span></code></a></li>
<li><a class="reference internal" href="reference/operator/aggregation/match.html#pipe._S_match" title="$match"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$match</span></code></a></li>
<li><a class="reference internal" href="reference/operator/aggregation/project.html#pipe._S_project" title="$project"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$project</span></code></a></li>
<li><a class="reference internal" href="reference/operator/aggregation/replaceRoot.html#pipe._S_replaceRoot" title="$replaceRoot"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$replaceRoot</span></code></a></li>
<li><a class="reference internal" href="reference/operator/aggregation/replaceWith.html#pipe._S_replaceWith" title="$replaceWith"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$replaceWith</span></code></a> (Available starting in MongoDB 4.2)</li>
<li><a class="reference internal" href="reference/operator/aggregation/redact.html#pipe._S_redact" title="$redact"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$redact</span></code></a></li>
<li><a class="reference internal" href="reference/operator/aggregation/set.html#pipe._S_set" title="$set"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$set</span></code></a> (Available starting in MongoDB 4.2)</li>
<li><a class="reference internal" href="reference/operator/aggregation/unset.html#pipe._S_unset" title="$unset"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$unset</span></code></a> (Available starting in MongoDB 4.2)</li>
</ul>
<p>The following example uses stream to process the change events.</p>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-javascript"><div class="highlight"><pre><span></span><span class="kr">const</span> <span class="nx">pipeline</span> <span class="o">=</span> <span class="p">[</span>
  <span class="p">{</span> <span class="nx">$match</span><span class="o">:</span> <span class="p">{</span> <span class="s1">&#39;fullDocument.username&#39;</span><span class="o">:</span> <span class="s1">&#39;alice&#39;</span> <span class="p">}</span> <span class="p">},</span>
  <span class="p">{</span> <span class="nx">$addFields</span><span class="o">:</span> <span class="p">{</span> <span class="nx">newField</span><span class="o">:</span> <span class="s1">&#39;this is an added field!&#39;</span> <span class="p">}</span> <span class="p">}</span>
<span class="p">];</span>

<span class="kr">const</span> <span class="nx">collection</span> <span class="o">=</span> <span class="nx">db</span><span class="p">.</span><span class="nx">collection</span><span class="p">(</span><span class="s1">&#39;inventory&#39;</span><span class="p">);</span>
<span class="kr">const</span> <span class="nx">changeStream</span> <span class="o">=</span> <span class="nx">collection</span><span class="p">.</span><span class="nx">watch</span><span class="p">(</span><span class="nx">pipeline</span><span class="p">);</span>
<span class="nx">changeStream</span><span class="p">.</span><span class="nx">on</span><span class="p">(</span><span class="s1">&#39;change&#39;</span><span class="p">,</span> <span class="nx">next</span> <span class="p">=&gt;</span> <span class="p">{</span>
  <span class="c1">// process next document</span>
<span class="p">});</span>
</pre></div>
</div>
</div>
<p>Alternatively, you can also use iterator to process the change events:</p>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-javascript"><div class="highlight"><pre><span></span><span class="kr">const</span> <span class="nx">changeStreamIterator</span> <span class="o">=</span> <span class="nx">collection</span><span class="p">.</span><span class="nx">watch</span><span class="p">(</span><span class="nx">pipeline</span><span class="p">);</span>
<span class="kr">const</span> <span class="nx">next</span> <span class="o">=</span> <span class="nx">await</span> <span class="nx">changeStreamIterator</span><span class="p">.</span><span class="nx">next</span><span class="p">();</span>
</pre></div>
</div>
</div>
</div>
<div class="tabpanel-php" data-tabid="php"><p>You can control <a class="reference internal" href="reference/change-events.html#change-stream-output"><span class="std std-ref">change stream output</span></a> by
providing an array of one or more of the following pipeline stages when
configuring the change stream:</p>
<ul class="simple">
<li><a class="reference internal" href="reference/operator/aggregation/addFields.html#pipe._S_addFields" title="$addFields"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$addFields</span></code></a></li>
<li><a class="reference internal" href="reference/operator/aggregation/match.html#pipe._S_match" title="$match"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$match</span></code></a></li>
<li><a class="reference internal" href="reference/operator/aggregation/project.html#pipe._S_project" title="$project"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$project</span></code></a></li>
<li><a class="reference internal" href="reference/operator/aggregation/replaceRoot.html#pipe._S_replaceRoot" title="$replaceRoot"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$replaceRoot</span></code></a></li>
<li><a class="reference internal" href="reference/operator/aggregation/replaceWith.html#pipe._S_replaceWith" title="$replaceWith"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$replaceWith</span></code></a> (Available starting in MongoDB 4.2)</li>
<li><a class="reference internal" href="reference/operator/aggregation/redact.html#pipe._S_redact" title="$redact"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$redact</span></code></a></li>
<li><a class="reference internal" href="reference/operator/aggregation/set.html#pipe._S_set" title="$set"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$set</span></code></a> (Available starting in MongoDB 4.2)</li>
<li><a class="reference internal" href="reference/operator/aggregation/unset.html#pipe._S_unset" title="$unset"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$unset</span></code></a> (Available starting in MongoDB 4.2)</li>
</ul>
</div>
<div class="tabpanel-motor" data-tabid="motor"><p>You can control <a class="reference internal" href="reference/change-events.html#change-stream-output"><span class="std std-ref">change stream output</span></a> by
providing an array of one or more of the following pipeline stages when
configuring the change stream:</p>
<ul class="simple">
<li><a class="reference internal" href="reference/operator/aggregation/addFields.html#pipe._S_addFields" title="$addFields"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$addFields</span></code></a></li>
<li><a class="reference internal" href="reference/operator/aggregation/match.html#pipe._S_match" title="$match"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$match</span></code></a></li>
<li><a class="reference internal" href="reference/operator/aggregation/project.html#pipe._S_project" title="$project"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$project</span></code></a></li>
<li><a class="reference internal" href="reference/operator/aggregation/replaceRoot.html#pipe._S_replaceRoot" title="$replaceRoot"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$replaceRoot</span></code></a></li>
<li><a class="reference internal" href="reference/operator/aggregation/replaceWith.html#pipe._S_replaceWith" title="$replaceWith"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$replaceWith</span></code></a> (Available starting in MongoDB 4.2)</li>
<li><a class="reference internal" href="reference/operator/aggregation/redact.html#pipe._S_redact" title="$redact"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$redact</span></code></a></li>
<li><a class="reference internal" href="reference/operator/aggregation/set.html#pipe._S_set" title="$set"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$set</span></code></a> (Available starting in MongoDB 4.2)</li>
<li><a class="reference internal" href="reference/operator/aggregation/unset.html#pipe._S_unset" title="$unset"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$unset</span></code></a> (Available starting in MongoDB 4.2)</li>
</ul>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-python"><div class="highlight"><pre><span></span><span class="n">pipeline</span> <span class="o">=</span> <span class="p">[</span>
    <span class="p">{</span><span class="s1">&#39;$match&#39;</span><span class="p">:</span> <span class="p">{</span><span class="s1">&#39;fullDocument.username&#39;</span><span class="p">:</span> <span class="s1">&#39;alice&#39;</span><span class="p">}},</span>
    <span class="p">{</span><span class="s1">&#39;$addFields&#39;</span><span class="p">:</span> <span class="p">{</span><span class="s1">&#39;newField&#39;</span><span class="p">:</span> <span class="s1">&#39;this is an added field!&#39;</span><span class="p">}}</span>
<span class="p">]</span>
<span class="n">cursor</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">inventory</span><span class="o">.</span><span class="n">watch</span><span class="p">(</span><span class="n">pipeline</span><span class="o">=</span><span class="n">pipeline</span><span class="p">)</span>
<span class="n">document</span> <span class="o">=</span> <span class="n">await</span> <span class="n">cursor</span><span class="o">.</span><span class="n">next</span><span class="p">()</span>
</pre></div>
</div>
</div>
</div>
<div class="tabpanel-c" data-tabid="c"><p>You can control <a class="reference internal" href="reference/change-events.html#change-stream-output"><span class="std std-ref">change stream output</span></a> by
providing an array of one or more of the following pipeline stages when
configuring the change stream:</p>
<ul class="simple">
<li><a class="reference internal" href="reference/operator/aggregation/addFields.html#pipe._S_addFields" title="$addFields"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$addFields</span></code></a></li>
<li><a class="reference internal" href="reference/operator/aggregation/match.html#pipe._S_match" title="$match"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$match</span></code></a></li>
<li><a class="reference internal" href="reference/operator/aggregation/project.html#pipe._S_project" title="$project"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$project</span></code></a></li>
<li><a class="reference internal" href="reference/operator/aggregation/replaceRoot.html#pipe._S_replaceRoot" title="$replaceRoot"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$replaceRoot</span></code></a></li>
<li><a class="reference internal" href="reference/operator/aggregation/replaceWith.html#pipe._S_replaceWith" title="$replaceWith"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$replaceWith</span></code></a> (Available starting in MongoDB 4.2)</li>
<li><a class="reference internal" href="reference/operator/aggregation/redact.html#pipe._S_redact" title="$redact"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$redact</span></code></a></li>
<li><a class="reference internal" href="reference/operator/aggregation/set.html#pipe._S_set" title="$set"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$set</span></code></a> (Available starting in MongoDB 4.2)</li>
<li><a class="reference internal" href="reference/operator/aggregation/unset.html#pipe._S_unset" title="$unset"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$unset</span></code></a> (Available starting in MongoDB 4.2)</li>
</ul>
</div>
<div class="tabpanel-csharp" data-tabid="csharp"><p>You can control <a class="reference internal" href="reference/change-events.html#change-stream-output"><span class="std std-ref">change stream output</span></a> by
providing an array of one or more of the following pipeline stages when
configuring the change stream:</p>
<ul class="simple">
<li><a class="reference internal" href="reference/operator/aggregation/addFields.html#pipe._S_addFields" title="$addFields"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$addFields</span></code></a></li>
<li><a class="reference internal" href="reference/operator/aggregation/match.html#pipe._S_match" title="$match"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$match</span></code></a></li>
<li><a class="reference internal" href="reference/operator/aggregation/project.html#pipe._S_project" title="$project"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$project</span></code></a></li>
<li><a class="reference internal" href="reference/operator/aggregation/replaceRoot.html#pipe._S_replaceRoot" title="$replaceRoot"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$replaceRoot</span></code></a></li>
<li><a class="reference internal" href="reference/operator/aggregation/replaceWith.html#pipe._S_replaceWith" title="$replaceWith"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$replaceWith</span></code></a> (Available starting in MongoDB 4.2)</li>
<li><a class="reference internal" href="reference/operator/aggregation/redact.html#pipe._S_redact" title="$redact"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$redact</span></code></a></li>
<li><a class="reference internal" href="reference/operator/aggregation/set.html#pipe._S_set" title="$set"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$set</span></code></a> (Available starting in MongoDB 4.2)</li>
<li><a class="reference internal" href="reference/operator/aggregation/unset.html#pipe._S_unset" title="$unset"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$unset</span></code></a> (Available starting in MongoDB 4.2)</li>
</ul>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-c#"><div class="highlight"><pre><span></span><span class="kt">var</span> <span class="n">pipeline</span> <span class="p">=</span> <span class="k">new</span> <span class="n">EmptyPipelineDefinition</span><span class="p">&lt;</span><span class="n">ChangeStreamDocument</span><span class="p">&lt;</span><span class="n">BsonDocument</span><span class="p">&gt;&gt;()</span>
    <span class="p">.</span><span class="n">Match</span><span class="p">(</span><span class="n">change</span> <span class="p">=&gt;</span>
        <span class="n">change</span><span class="p">.</span><span class="n">FullDocument</span><span class="p">[</span><span class="s">&quot;username&quot;</span><span class="p">]</span> <span class="p">==</span> <span class="s">&quot;alice&quot;</span> <span class="p">||</span>
        <span class="n">change</span><span class="p">.</span><span class="n">OperationType</span> <span class="p">==</span> <span class="n">ChangeStreamOperationType</span><span class="p">.</span><span class="n">Delete</span><span class="p">)</span>
    <span class="p">.</span><span class="n">AppendStage</span><span class="p">&lt;</span><span class="n">ChangeStreamDocument</span><span class="p">&lt;</span><span class="n">BsonDocument</span><span class="p">&gt;,</span> <span class="n">ChangeStreamDocument</span><span class="p">&lt;</span><span class="n">BsonDocument</span><span class="p">&gt;,</span> <span class="n">BsonDocument</span><span class="p">&gt;(</span>
        <span class="s">&quot;{ $addFields : { newField : &#39;this is an added field!&#39; } }&quot;</span><span class="p">);</span>

<span class="kt">var</span> <span class="n">collection</span> <span class="p">=</span> <span class="n">database</span><span class="p">.</span><span class="n">GetCollection</span><span class="p">&lt;</span><span class="n">BsonDocument</span><span class="p">&gt;(</span><span class="s">&quot;inventory&quot;</span><span class="p">);</span>
<span class="k">using</span> <span class="p">(</span><span class="kt">var</span> <span class="n">cursor</span> <span class="p">=</span> <span class="n">collection</span><span class="p">.</span><span class="n">Watch</span><span class="p">(</span><span class="n">pipeline</span><span class="p">))</span>
<span class="p">{</span>
    <span class="k">while</span> <span class="p">(</span><span class="n">cursor</span><span class="p">.</span><span class="n">MoveNext</span><span class="p">()</span> <span class="p">&amp;&amp;</span> <span class="n">cursor</span><span class="p">.</span><span class="n">Current</span><span class="p">.</span><span class="n">Count</span><span class="p">()</span> <span class="p">==</span> <span class="m">0</span><span class="p">)</span> <span class="p">{</span> <span class="p">}</span> <span class="c1">// keep calling MoveNext until we&#39;ve read the first batch</span>
    <span class="kt">var</span> <span class="n">next</span> <span class="p">=</span> <span class="n">cursor</span><span class="p">.</span><span class="n">Current</span><span class="p">.</span><span class="n">First</span><span class="p">();</span>
<span class="p">}</span>
</pre></div>
</div>
</div>
</div>
<div class="tabpanel-ruby" data-tabid="ruby"><p>You can control <a class="reference internal" href="reference/change-events.html#change-stream-output"><span class="std std-ref">change stream output</span></a> by
providing an array of one or more of the following pipeline stages when
configuring the change stream:</p>
<ul class="simple">
<li><a class="reference internal" href="reference/operator/aggregation/addFields.html#pipe._S_addFields" title="$addFields"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$addFields</span></code></a></li>
<li><a class="reference internal" href="reference/operator/aggregation/match.html#pipe._S_match" title="$match"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$match</span></code></a></li>
<li><a class="reference internal" href="reference/operator/aggregation/project.html#pipe._S_project" title="$project"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$project</span></code></a></li>
<li><a class="reference internal" href="reference/operator/aggregation/replaceRoot.html#pipe._S_replaceRoot" title="$replaceRoot"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$replaceRoot</span></code></a></li>
<li><a class="reference internal" href="reference/operator/aggregation/replaceWith.html#pipe._S_replaceWith" title="$replaceWith"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$replaceWith</span></code></a> (Available starting in MongoDB 4.2)</li>
<li><a class="reference internal" href="reference/operator/aggregation/redact.html#pipe._S_redact" title="$redact"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$redact</span></code></a></li>
<li><a class="reference internal" href="reference/operator/aggregation/set.html#pipe._S_set" title="$set"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$set</span></code></a> (Available starting in MongoDB 4.2)</li>
<li><a class="reference internal" href="reference/operator/aggregation/unset.html#pipe._S_unset" title="$unset"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$unset</span></code></a> (Available starting in MongoDB 4.2)</li>
</ul>
</div>
<div class="tabpanel-go" data-tabid="go"><p>You can control <a class="reference internal" href="reference/change-events.html#change-stream-output"><span class="std std-ref">change stream output</span></a> by
providing an array of one or more of the following pipeline stages when
configuring the change stream:</p>
<ul class="simple">
<li><a class="reference internal" href="reference/operator/aggregation/addFields.html#pipe._S_addFields" title="$addFields"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$addFields</span></code></a></li>
<li><a class="reference internal" href="reference/operator/aggregation/match.html#pipe._S_match" title="$match"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$match</span></code></a></li>
<li><a class="reference internal" href="reference/operator/aggregation/project.html#pipe._S_project" title="$project"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$project</span></code></a></li>
<li><a class="reference internal" href="reference/operator/aggregation/replaceRoot.html#pipe._S_replaceRoot" title="$replaceRoot"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$replaceRoot</span></code></a></li>
<li><a class="reference internal" href="reference/operator/aggregation/replaceWith.html#pipe._S_replaceWith" title="$replaceWith"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$replaceWith</span></code></a> (Available starting in MongoDB 4.2)</li>
<li><a class="reference internal" href="reference/operator/aggregation/redact.html#pipe._S_redact" title="$redact"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$redact</span></code></a></li>
<li><a class="reference internal" href="reference/operator/aggregation/set.html#pipe._S_set" title="$set"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$set</span></code></a> (Available starting in MongoDB 4.2)</li>
<li><a class="reference internal" href="reference/operator/aggregation/unset.html#pipe._S_unset" title="$unset"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$unset</span></code></a> (Available starting in MongoDB 4.2)</li>
</ul>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-go"><div class="highlight"><pre><span></span><span class="nx">pipeline</span> <span class="o">:=</span> <span class="nx">mongo</span><span class="p">.</span><span class="nx">Pipeline</span><span class="p">{</span><span class="nx">bson</span><span class="p">.</span><span class="nx">D</span><span class="p">{{</span><span class="s">&quot;$match&quot;</span><span class="p">,</span> <span class="nx">bson</span><span class="p">.</span><span class="nx">D</span><span class="p">{{</span><span class="s">&quot;$or&quot;</span><span class="p">,</span>
	<span class="nx">bson</span><span class="p">.</span><span class="nx">A</span><span class="p">{</span>
		<span class="nx">bson</span><span class="p">.</span><span class="nx">D</span><span class="p">{{</span><span class="s">&quot;fullDocument.username&quot;</span><span class="p">,</span> <span class="s">&quot;alice&quot;</span><span class="p">}},</span>
		<span class="nx">bson</span><span class="p">.</span><span class="nx">D</span><span class="p">{{</span><span class="s">&quot;operationType&quot;</span><span class="p">,</span> <span class="s">&quot;delete&quot;</span><span class="p">}}}}},</span>
<span class="p">}}}</span>
<span class="nx">cs</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">coll</span><span class="p">.</span><span class="nx">Watch</span><span class="p">(</span><span class="nx">ctx</span><span class="p">,</span> <span class="nx">pipeline</span><span class="p">)</span>
<span class="nx">require</span><span class="p">.</span><span class="nx">NoError</span><span class="p">(</span><span class="nx">t</span><span class="p">,</span> <span class="nx">err</span><span class="p">)</span>
<span class="k">defer</span> <span class="nx">cs</span><span class="p">.</span><span class="nx">Close</span><span class="p">(</span><span class="nx">ctx</span><span class="p">)</span>

<span class="nx">ok</span> <span class="o">:=</span> <span class="nx">cs</span><span class="p">.</span><span class="nx">Next</span><span class="p">(</span><span class="nx">ctx</span><span class="p">)</span>
<span class="nx">next</span> <span class="o">:=</span> <span class="nx">cs</span><span class="p">.</span><span class="nx">Current</span>
</pre></div>
</div>
</div>
    </div>
  </div>
</div><div class="admonition-tip admonition">
<p class="first admonition-title">Tip</p>
<p>The <a class="reference internal" href="reference/change-events.html#change-stream-event-id"><span class="std std-ref">_id</span></a> field of the change stream
event document act as the <a class="reference internal" href="#change-stream-resume"><span class="std std-ref">resume token</span></a>. Do not use the pipeline to modify or remove
the change stream event’s <code class="docutils literal"><span class="pre">_id</span></code> field.</p>
<p class="last">Starting in MongoDB 4.2, change streams will throw an exception if
the <a class="reference internal" href="#change-stream-modify-output"><span class="std std-ref">change stream aggregation pipeline</span></a> modifies an event’s <a class="reference internal" href="reference/change-events.html#change-stream-event-id"><span class="std std-ref">_id</span></a> field.</p>
</div>
<p>See <a class="reference internal" href="reference/change-events.html#change-stream-output"><span class="std std-ref">Change Events</span></a> for more information on the change stream
response document format.</p>
</div>
</div>
<div class="section" id="lookup-full-document-for-update-operations">
<h2>Lookup Full Document for Update Operations<a class="headerlink" href="#lookup-full-document-for-update-operations" title="Permalink to this headline">¶</a></h2>
<div class="docutils container">
<ul class="guide__pills pillstrip-declaration" role="tablist" data-tab-preference="languages"></ul><p>By default, change streams only return the delta of fields during
the update operation. However, you can configure the change stream
to return the most current majority-committed version of the updated
document.</p>
<div class="tabs" data-tab-preference="languages">
  <ul class="tab-strip tab-strip--singleton" role="tablist">
    <li class="tab-strip__element" data-tabid="python" role="tab" aria-selected="true">Python</li>
    <li class="tab-strip__element" data-tabid="javasync" role="tab" aria-selected="false">Java (Sync)</li>
    <li class="tab-strip__element" data-tabid="nodejs" role="tab" aria-selected="false">Node.js</li>
    <li class="tab-strip__element" data-tabid="php" role="tab" aria-selected="false">PHP</li>
    <li class="tab-strip__element" data-tabid="motor" role="tab" aria-selected="false">Motor</li>
    <li class="tab-strip__element dropdown">
      <a class="dropdown-toggle" data-toggle="dropdown">Other <span class="caret"></span></a>
      <ul class="dropdown-menu tab-strip__dropdown" role="menu">
        <li data-tabid="c" aria-selected="false">C</li>
        <li data-tabid="csharp" aria-selected="false">C#</li>
        <li data-tabid="ruby" aria-selected="false">Ruby</li>
        <li data-tabid="go" aria-selected="false">Go</li>
      </ul>
    </li>
  </ul>
  <div class="tabs__content" role="tabpanel">
    <div class="tabpanel-python" data-tabid="python"><p>To return the most current majority-committed version of the updated
document, pass <code class="docutils literal"><span class="pre">full_document='updateLookup'</span></code> to the
<a class="reference internal" href="reference/method/db.collection.watch.html#db.collection.watch" title="db.collection.watch()"><code class="xref mongodb mongodb-method docutils literal"><span class="pre">db.collection.watch()</span></code></a> method.</p>
<p>In the example below, all update operations notifications
include a <code class="docutils literal"><span class="pre">full_document</span></code> field that represents the <em>current</em>
version of the document affected by the update operation.</p>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-python"><div class="highlight"><pre><span></span><span class="n">cursor</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">inventory</span><span class="o">.</span><span class="n">watch</span><span class="p">(</span><span class="n">full_document</span><span class="o">=</span><span class="s1">&#39;updateLookup&#39;</span><span class="p">)</span>
<span class="n">document</span> <span class="o">=</span> <span class="nb">next</span><span class="p">(</span><span class="n">cursor</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
<div class="tabpanel-javasync" data-tabid="javasync"><p>To return the most current majority-committed version of the updated
document, pass <code class="docutils literal"><span class="pre">FullDocument.UPDATE_LOOKUP</span></code>  to the
<code class="xref mongodb mongodb-method docutils literal"><span class="pre">db.collection.watch.fullDocument()</span></code> method.</p>
<p>In the example below, all update operations notifications
include a <code class="docutils literal"><span class="pre">FullDocument</span></code> field that represents the <em>current</em>
version of the document affected by the update operation.</p>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-java"><div class="highlight"><pre><span></span><span class="n">cursor</span> <span class="o">=</span> <span class="n">inventory</span><span class="o">.</span><span class="na">watch</span><span class="o">().</span><span class="na">fullDocument</span><span class="o">(</span><span class="n">FullDocument</span><span class="o">.</span><span class="na">UPDATE_LOOKUP</span><span class="o">).</span><span class="na">iterator</span><span class="o">();</span>
<span class="n">next</span> <span class="o">=</span> <span class="n">cursor</span><span class="o">.</span><span class="na">next</span><span class="o">();</span>
</pre></div>
</div>
</div>
</div>
<div class="tabpanel-nodejs" data-tabid="nodejs"><p>To return the most current majority-committed version of the updated
document, pass <code class="docutils literal"><span class="pre">{</span> <span class="pre">fullDocument:</span> <span class="pre">'updateLookup'</span> <span class="pre">}</span></code> to the
<code class="xref mongodb mongodb-method docutils literal"><span class="pre">collection.watch()</span></code> method.</p>
<p>In the example below, all update operations notifications
include a <code class="docutils literal"><span class="pre">fullDocument</span></code> field that represents the <em>current</em>
version of the document affected by the update operation.</p>
<p>The following example uses stream to process the change events.</p>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-javascript"><div class="highlight"><pre><span></span><span class="kr">const</span> <span class="nx">collection</span> <span class="o">=</span> <span class="nx">db</span><span class="p">.</span><span class="nx">collection</span><span class="p">(</span><span class="s1">&#39;inventory&#39;</span><span class="p">);</span>
<span class="kr">const</span> <span class="nx">changeStream</span> <span class="o">=</span> <span class="nx">collection</span><span class="p">.</span><span class="nx">watch</span><span class="p">({</span> <span class="nx">fullDocument</span><span class="o">:</span> <span class="s1">&#39;updateLookup&#39;</span> <span class="p">});</span>
<span class="nx">changeStream</span><span class="p">.</span><span class="nx">on</span><span class="p">(</span><span class="s1">&#39;change&#39;</span><span class="p">,</span> <span class="nx">next</span> <span class="p">=&gt;</span> <span class="p">{</span>
  <span class="c1">// process next document</span>
<span class="p">});</span>
</pre></div>
</div>
</div>
<p>Alternatively, you can also use iterator to process the change events:</p>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-javascript"><div class="highlight"><pre><span></span><span class="kr">const</span> <span class="nx">changeStreamIterator</span> <span class="o">=</span> <span class="nx">collection</span><span class="p">.</span><span class="nx">watch</span><span class="p">({</span> <span class="nx">fullDocument</span><span class="o">:</span> <span class="s1">&#39;updateLookup&#39;</span> <span class="p">});</span>
<span class="kr">const</span> <span class="nx">next</span> <span class="o">=</span> <span class="nx">await</span> <span class="nx">changeStreamIterator</span><span class="p">.</span><span class="nx">next</span><span class="p">();</span>
</pre></div>
</div>
</div>
</div>
<div class="tabpanel-php" data-tabid="php"><p>To return the most current
majority-committed version of the updated document, pass
<code class="docutils literal"><span class="pre">&quot;fullDocument'</span> <span class="pre">=&gt;</span> <span class="pre">\MongoDB\Operation\ChangeStreamCommand::FULL_DOCUMENT_UPDATE_LOOKUP&quot;</span></code>
to the <code class="xref mongodb mongodb-method docutils literal"><span class="pre">watch()</span></code> method.</p>
<p>In the example below, all update operations notifications
include a <code class="docutils literal"><span class="pre">fullDocument</span></code> field that represents the <em>current</em>
version of the document affected by the update operation.</p>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-php"><div class="highlight"><pre><span></span><span class="nv">$changeStream</span> <span class="o">=</span> <span class="nv">$db</span><span class="o">-&gt;</span><span class="na">inventory</span><span class="o">-&gt;</span><span class="na">watch</span><span class="p">([],</span> <span class="p">[</span><span class="s1">&#39;fullDocument&#39;</span> <span class="o">=&gt;</span> <span class="nx">\MongoDB\Operation\Watch</span><span class="o">::</span><span class="na">FULL_DOCUMENT_UPDATE_LOOKUP</span><span class="p">]);</span>
<span class="nv">$changeStream</span><span class="o">-&gt;</span><span class="na">rewind</span><span class="p">();</span>

<span class="nv">$firstChange</span> <span class="o">=</span> <span class="nv">$changeStream</span><span class="o">-&gt;</span><span class="na">current</span><span class="p">();</span>

<span class="nv">$changeStream</span><span class="o">-&gt;</span><span class="na">next</span><span class="p">();</span>

<span class="nv">$secondChange</span> <span class="o">=</span> <span class="nv">$changeStream</span><span class="o">-&gt;</span><span class="na">current</span><span class="p">();</span>
</pre></div>
</div>
</div>
</div>
<div class="tabpanel-motor" data-tabid="motor"><p>To return the most current majority-committed version of the updated
document, pass <code class="docutils literal"><span class="pre">full_document='updateLookup'</span></code> to the
<a class="reference internal" href="reference/method/db.collection.watch.html#db.collection.watch" title="db.collection.watch()"><code class="xref mongodb mongodb-method docutils literal"><span class="pre">db.collection.watch()</span></code></a> method.</p>
<p>In the example below, all update operations notifications
include a <code class="docutils literal"><span class="pre">`full_document</span></code> field that represents the <em>current</em>
version of the document affected by the update operation.</p>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-python"><div class="highlight"><pre><span></span><span class="n">cursor</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">inventory</span><span class="o">.</span><span class="n">watch</span><span class="p">(</span><span class="n">full_document</span><span class="o">=</span><span class="s1">&#39;updateLookup&#39;</span><span class="p">)</span>
<span class="n">document</span> <span class="o">=</span> <span class="n">await</span> <span class="n">cursor</span><span class="o">.</span><span class="n">next</span><span class="p">()</span>
</pre></div>
</div>
</div>
</div>
<div class="tabpanel-c" data-tabid="c"><p>To return the most current majority-committed version of the updated
document, pass the <code class="docutils literal"><span class="pre">&quot;fullDocument&quot;</span></code> option with the <code class="docutils literal"><span class="pre">&quot;updateLookup&quot;</span></code> value to the
<code class="xref mongodb mongodb-method docutils literal"><span class="pre">mongoc_collection_watch</span></code> method.</p>
<p>In the example below, all update operations notifications
include a <code class="docutils literal"><span class="pre">fullDocument</span></code> field that represents the <em>current</em>
version of the document affected by the update operation.</p>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-c"><div class="highlight"><pre><span></span><span class="n">BSON_APPEND_UTF8</span> <span class="p">(</span><span class="o">&amp;</span><span class="n">opts</span><span class="p">,</span> <span class="s">&quot;fullDocument&quot;</span><span class="p">,</span> <span class="s">&quot;updateLookup&quot;</span><span class="p">);</span>
<span class="n">stream</span> <span class="o">=</span> <span class="n">mongoc_collection_watch</span> <span class="p">(</span><span class="n">collection</span><span class="p">,</span> <span class="n">pipeline</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">opts</span><span class="p">);</span>
<span class="n">mongoc_change_stream_next</span> <span class="p">(</span><span class="n">stream</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">change</span><span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="n">mongoc_change_stream_error_document</span> <span class="p">(</span><span class="n">stream</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">error</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">))</span> <span class="p">{</span>
   <span class="n">MONGOC_ERROR</span> <span class="p">(</span><span class="s">&quot;%s</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">,</span> <span class="n">error</span><span class="p">.</span><span class="n">message</span><span class="p">);</span>
<span class="p">}</span>

<span class="n">mongoc_change_stream_destroy</span> <span class="p">(</span><span class="n">stream</span><span class="p">);</span>
</pre></div>
</div>
</div>
</div>
<div class="tabpanel-csharp" data-tabid="csharp"><p>To return the most current majority-committed version of the updated
document, pass <code class="docutils literal"><span class="pre">&quot;FullDocument</span> <span class="pre">=</span> <span class="pre">ChangeStreamFullDocumentOption.UpdateLookup&quot;</span></code> to the
<code class="xref mongodb mongodb-method docutils literal"><span class="pre">collection.Watch()</span></code> method.</p>
<p>In the example below, all update operations notifications
include a <code class="docutils literal"><span class="pre">FullDocument</span></code> field that represents the <em>current</em>
version of the document affected by the update operation.</p>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-C#"><div class="highlight"><pre><span></span><span class="kt">var</span> <span class="n">options</span> <span class="p">=</span> <span class="k">new</span> <span class="n">ChangeStreamOptions</span> <span class="p">{</span> <span class="n">FullDocument</span> <span class="p">=</span> <span class="n">ChangeStreamFullDocumentOption</span><span class="p">.</span><span class="n">UpdateLookup</span> <span class="p">};</span>
<span class="kt">var</span> <span class="n">cursor</span> <span class="p">=</span> <span class="n">inventory</span><span class="p">.</span><span class="n">Watch</span><span class="p">(</span><span class="n">options</span><span class="p">);</span>
<span class="k">while</span> <span class="p">(</span><span class="n">cursor</span><span class="p">.</span><span class="n">MoveNext</span><span class="p">()</span> <span class="p">&amp;&amp;</span> <span class="n">cursor</span><span class="p">.</span><span class="n">Current</span><span class="p">.</span><span class="n">Count</span><span class="p">()</span> <span class="p">==</span> <span class="m">0</span><span class="p">)</span> <span class="p">{</span> <span class="p">}</span> <span class="c1">// keep calling MoveNext until we&#39;ve read the first batch</span>
<span class="kt">var</span> <span class="n">next</span> <span class="p">=</span> <span class="n">cursor</span><span class="p">.</span><span class="n">Current</span><span class="p">.</span><span class="n">First</span><span class="p">();</span>
<span class="n">cursor</span><span class="p">.</span><span class="n">Dispose</span><span class="p">();</span>
</pre></div>
</div>
</div>
</div>
<div class="tabpanel-ruby" data-tabid="ruby"><p>To return the most current majority-committed version of the updated
document, pass <code class="docutils literal"><span class="pre">full_document:</span> <span class="pre">'updateLookup'</span></code> to the
<code class="xref mongodb mongodb-method docutils literal"><span class="pre">watch()</span></code> method.</p>
<p>In the example below, all update operations notifications
include a <code class="docutils literal"><span class="pre">full_document</span></code> field that represents the <em>current</em>
version of the document affected by the update operation.</p>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-ruby"><div class="highlight"><pre><span></span><span class="n">cursor</span> <span class="o">=</span> <span class="n">inventory</span><span class="o">.</span><span class="n">watch</span><span class="p">(</span><span class="o">[]</span><span class="p">,</span> <span class="ss">full_document</span><span class="p">:</span> <span class="s1">&#39;updateLookup&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">to_enum</span>
<span class="n">next_change</span> <span class="o">=</span> <span class="n">cursor</span><span class="o">.</span><span class="n">next</span>
</pre></div>
</div>
</div>
</div>
<div class="tabpanel-go" data-tabid="go"><p>To return the most current majority-committed version of the
updated document, <code class="docutils literal"><span class="pre">SetFullDocument(options.UpdateLookup)</span></code>
change stream option.</p>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-go"><div class="highlight"><pre><span></span><span class="nx">cs</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">coll</span><span class="p">.</span><span class="nx">Watch</span><span class="p">(</span><span class="nx">ctx</span><span class="p">,</span> <span class="nx">mongo</span><span class="p">.</span><span class="nx">Pipeline</span><span class="p">{},</span> <span class="nx">options</span><span class="p">.</span><span class="nx">ChangeStream</span><span class="p">().</span><span class="nx">SetFullDocument</span><span class="p">(</span><span class="nx">options</span><span class="p">.</span><span class="nx">UpdateLookup</span><span class="p">))</span>
<span class="nx">require</span><span class="p">.</span><span class="nx">NoError</span><span class="p">(</span><span class="nx">t</span><span class="p">,</span> <span class="nx">err</span><span class="p">)</span>
<span class="k">defer</span> <span class="nx">cs</span><span class="p">.</span><span class="nx">Close</span><span class="p">(</span><span class="nx">ctx</span><span class="p">)</span>

<span class="nx">ok</span> <span class="o">:=</span> <span class="nx">cs</span><span class="p">.</span><span class="nx">Next</span><span class="p">(</span><span class="nx">ctx</span><span class="p">)</span>
<span class="nx">next</span> <span class="o">:=</span> <span class="nx">cs</span><span class="p">.</span><span class="nx">Current</span>
</pre></div>
</div>
</div>
    </div>
  </div>
</div><div class="admonition note">
<p class="first admonition-title">Note</p>
<p>If there are one or more majority-committed operations that modified
the updated document <em>after</em> the update operation but <em>before</em> the
lookup, the full document returned may differ significantly from the
document at the time of the update operation.</p>
<p>However, the deltas included in the change stream document always
correctly describe the watched collection changes that applied to
that change stream event.</p>
<p class="last">See <a class="reference internal" href="reference/change-events.html#change-stream-output"><span class="std std-ref">Change Events</span></a> for more information on the change
stream response document format.</p>
</div>
</div>
</div>
<div class="section" id="resume-a-change-stream">
<span id="change-stream-resume"></span><h2>Resume a Change Stream<a class="headerlink" href="#resume-a-change-stream" title="Permalink to this headline">¶</a></h2>
<p>Change streams are resumable by specifying a resume token to either
<a class="reference internal" href="#change-stream-resume-after"><span class="std std-ref">resumeAfter</span></a> or
<a class="reference internal" href="#change-stream-start-after"><span class="std std-ref">startAfter</span></a> when opening the cursor.</p>
<div class="section" id="resumeafter-for-change-streams">
<span id="change-stream-resume-after"></span><h3><code class="docutils literal"><span class="pre">resumeAfter</span></code> for Change Streams<a class="headerlink" href="#resumeafter-for-change-streams" title="Permalink to this headline">¶</a></h3>
<div class="docutils container">
<ul class="guide__pills pillstrip-declaration" role="tablist" data-tab-preference="languages"></ul><p>You can resume a change stream after a specific event by passing a resume token
to <code class="docutils literal"><span class="pre">resumeAfter</span></code> when opening the cursor. For the resume token, use the
<code class="docutils literal"><span class="pre">_id</span></code> value of the <a class="reference internal" href="reference/change-events.html#change-stream-output"><span class="std std-ref">change stream event document</span></a>.
See <a class="reference internal" href="#change-stream-resume-token"><span class="std std-ref">Resume Tokens</span></a> for more information on the resume token.</p>
<div class="admonition important">
<p class="first admonition-title">Important</p>
<ul class="last simple">
<li>The oplog must have enough history to locate the operation
associated with the token or the timestamp, if the timestamp is in
the past.</li>
<li>You cannot use <code class="docutils literal"><span class="pre">resumeAfter</span></code> to resume a change stream after an
<a class="reference internal" href="reference/change-events.html#change-event-invalidate"><span class="std std-ref">invalidate event</span></a> (for example, a collection
drop or rename) closes the stream. Starting in MongoDB 4.2, you can use
<a class="reference internal" href="#change-stream-start-after"><span class="std std-ref">startAfter</span></a> to start a new change
stream after an <a class="reference internal" href="reference/change-events.html#change-event-invalidate"><span class="std std-ref">invalidate event</span></a>.</li>
</ul>
</div>
<div class="tabs" data-tab-preference="languages">
  <ul class="tab-strip tab-strip--singleton" role="tablist">
    <li class="tab-strip__element" data-tabid="python" role="tab" aria-selected="true">Python</li>
    <li class="tab-strip__element" data-tabid="javasync" role="tab" aria-selected="false">Java (Sync)</li>
    <li class="tab-strip__element" data-tabid="nodejs" role="tab" aria-selected="false">Node.js</li>
    <li class="tab-strip__element" data-tabid="php" role="tab" aria-selected="false">PHP</li>
    <li class="tab-strip__element" data-tabid="motor" role="tab" aria-selected="false">Motor</li>
    <li class="tab-strip__element dropdown">
      <a class="dropdown-toggle" data-toggle="dropdown">Other <span class="caret"></span></a>
      <ul class="dropdown-menu tab-strip__dropdown" role="menu">
        <li data-tabid="c" aria-selected="false">C</li>
        <li data-tabid="csharp" aria-selected="false">C#</li>
        <li data-tabid="ruby" aria-selected="false">Ruby</li>
        <li data-tabid="go" aria-selected="false">Go</li>
      </ul>
    </li>
  </ul>
  <div class="tabs__content" role="tabpanel">
    <div class="tabpanel-python" data-tabid="python"><p>You can use the <code class="docutils literal"><span class="pre">resume_after</span></code> modifier to resume
notifications after the operation specified in the resume
token. The <code class="docutils literal"><span class="pre">resume_after</span></code> modifier takes a value that must
resolve to a resume token, e.g. <code class="docutils literal"><span class="pre">resume_token</span></code> in the
example below.</p>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-python"><div class="highlight"><pre><span></span><span class="n">resume_token</span> <span class="o">=</span> <span class="n">cursor</span><span class="o">.</span><span class="n">resume_token</span>
<span class="n">cursor</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">inventory</span><span class="o">.</span><span class="n">watch</span><span class="p">(</span><span class="n">resume_after</span><span class="o">=</span><span class="n">resume_token</span><span class="p">)</span>
<span class="n">document</span> <span class="o">=</span> <span class="nb">next</span><span class="p">(</span><span class="n">cursor</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
<div class="tabpanel-javasync" data-tabid="javasync"><p>You can use the <code class="docutils literal"><span class="pre">resumeAfter()</span></code> method to resume
notifications after the operation specified in the resume
token. The <code class="docutils literal"><span class="pre">resumeAfter()</span></code> method takes a value that must
resolve to a resume token, e.g. <code class="docutils literal"><span class="pre">resumeToken</span></code> in the
example below.</p>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-java"><div class="highlight"><pre><span></span><span class="n">BsonDocument</span> <span class="n">resumeToken</span> <span class="o">=</span> <span class="n">next</span><span class="o">.</span><span class="na">getResumeToken</span><span class="o">();</span>
<span class="n">cursor</span> <span class="o">=</span> <span class="n">inventory</span><span class="o">.</span><span class="na">watch</span><span class="o">().</span><span class="na">resumeAfter</span><span class="o">(</span><span class="n">resumeToken</span><span class="o">).</span><span class="na">iterator</span><span class="o">();</span>
<span class="n">next</span> <span class="o">=</span> <span class="n">cursor</span><span class="o">.</span><span class="na">next</span><span class="o">();</span>
</pre></div>
</div>
</div>
</div>
<div class="tabpanel-nodejs" data-tabid="nodejs"><p>You can use the <code class="docutils literal"><span class="pre">resumeAfter</span></code> option to resume
notifications after the operation specified in the resume
token. The <code class="docutils literal"><span class="pre">resumeAfter</span></code> option takes a value that must
resolve to a resume token, e.g. <code class="docutils literal"><span class="pre">resumeToken</span></code> in the
example below.</p>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-javascript"><div class="highlight"><pre><span></span><span class="kr">const</span> <span class="nx">collection</span> <span class="o">=</span> <span class="nx">db</span><span class="p">.</span><span class="nx">collection</span><span class="p">(</span><span class="s1">&#39;inventory&#39;</span><span class="p">);</span>
<span class="kr">const</span> <span class="nx">changeStream</span> <span class="o">=</span> <span class="nx">collection</span><span class="p">.</span><span class="nx">watch</span><span class="p">();</span>

<span class="kd">let</span> <span class="nx">newChangeStream</span><span class="p">;</span>
<span class="nx">changeStream</span><span class="p">.</span><span class="nx">once</span><span class="p">(</span><span class="s1">&#39;change&#39;</span><span class="p">,</span> <span class="nx">next</span> <span class="p">=&gt;</span> <span class="p">{</span>
  <span class="kr">const</span> <span class="nx">resumeToken</span> <span class="o">=</span> <span class="nx">changeStream</span><span class="p">.</span><span class="nx">resumeToken</span><span class="p">;</span>
  <span class="nx">changeStream</span><span class="p">.</span><span class="nx">close</span><span class="p">();</span>

  <span class="nx">newChangeStream</span> <span class="o">=</span> <span class="nx">collection</span><span class="p">.</span><span class="nx">watch</span><span class="p">({</span> <span class="nx">resumeAfter</span><span class="o">:</span> <span class="nx">resumeToken</span> <span class="p">});</span>
  <span class="nx">newChangeStream</span><span class="p">.</span><span class="nx">on</span><span class="p">(</span><span class="s1">&#39;change&#39;</span><span class="p">,</span> <span class="nx">next</span> <span class="p">=&gt;</span> <span class="p">{</span>
    <span class="c1">// process next document</span>
  <span class="p">});</span>
<span class="p">});</span>
</pre></div>
</div>
</div>
</div>
<div class="tabpanel-php" data-tabid="php"><p>You can use the <code class="docutils literal"><span class="pre">resumeAfter</span></code> option to resume
notifications after the operation specified in the resume
token. The <code class="docutils literal"><span class="pre">resumeAfter</span></code> option takes a value that must
resolve to a resume token, e.g. <code class="docutils literal"><span class="pre">$resumeToken</span></code> in the
example below.</p>
<div class="copyable-code button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-php"><div class="highlight"><pre><span></span><span class="nv">$resumeToken</span> <span class="o">=</span> <span class="nv">$changeStream</span><span class="o">-&gt;</span><span class="na">getResumeToken</span><span class="p">();</span>

<span class="k">if</span> <span class="p">(</span><span class="nv">$resumeToken</span> <span class="o">===</span> <span class="k">null</span><span class="p">)</span> <span class="p">{</span>
    <span class="k">throw</span> <span class="k">new</span> <span class="nx">\Exception</span><span class="p">(</span><span class="s1">&#39;Resume token was not found&#39;</span><span class="p">);</span>
<span class="p">}</span>

<span class="nv">$changeStream</span> <span class="o">=</span> <span class="nv">$db</span><span class="o">-&gt;</span><span class="na">inventory</span><span class="o">-&gt;</span><span class="na">watch</span><span class="p">([],</span> <span class="p">[</span><span class="s1">&#39;resumeAfter&#39;</span> <span class="o">=&gt;</span> <span class="nv">$resumeToken</span><span class="p">]);</span>
<span class="nv">$changeStream</span><span class="o">-&gt;</span><span class="na">rewind</span><span class="p">();</span>

<span class="nv">$firstChange</span> <span class="o">=</span> <span class="nv">$changeStream</span><span class="o">-&gt;</span><span class="na">current</span><span class="p">();</span>
</pre></div>
</div>
</div>
</div>
<div class="tabpanel-motor" data-tabid="motor"><p>You can use the <code class="docutils literal"><span class="pre">resume_after</span></code> modifier to resume
notifications after the operation specified in the resume
token. The <code class="docutils literal"><span class="pre">resume_after</span></code> modifier takes a value that must
resolve to a resume token, e.g. <code class="docutils literal"><span class="pre">resume_token</span></code> in the
example below.</p>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-python"><div class="highlight"><pre><span></span><span class="n">resume_token</span> <span class="o">=</span> <span class="n">cursor</span><span class="o">.</span><span class="n">resume_token</span>
<span class="n">cursor</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">inventory</span><span class="o">.</span><span class="n">watch</span><span class="p">(</span><span class="n">resume_after</span><span class="o">=</span><span class="n">resume_token</span><span class="p">)</span>
<span class="n">document</span> <span class="o">=</span> <span class="n">await</span> <span class="n">cursor</span><span class="o">.</span><span class="n">next</span><span class="p">()</span>
</pre></div>
</div>
</div>
</div>
<div class="tabpanel-c" data-tabid="c"><p>In the example below, the <code class="docutils literal"><span class="pre">resumeAfter</span></code> option is appended to the stream options
to recreate the stream after it has been destroyed. Passing the <code class="docutils literal"><span class="pre">_id</span></code> to
the change stream attempts to resume notifications starting after the
operation specified.</p>
<div class="copyable-code button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-C"><div class="highlight"><pre><span></span><span class="n">stream</span> <span class="o">=</span> <span class="n">mongoc_collection_watch</span> <span class="p">(</span><span class="n">collection</span><span class="p">,</span> <span class="n">pipeline</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="n">mongoc_change_stream_next</span> <span class="p">(</span><span class="n">stream</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">change</span><span class="p">))</span> <span class="p">{</span>
   <span class="n">resume_token</span> <span class="o">=</span> <span class="n">mongoc_change_stream_get_resume_token</span> <span class="p">(</span><span class="n">stream</span><span class="p">);</span>
   <span class="n">BSON_APPEND_DOCUMENT</span> <span class="p">(</span><span class="o">&amp;</span><span class="n">opts</span><span class="p">,</span> <span class="s">&quot;resumeAfter&quot;</span><span class="p">,</span> <span class="n">resume_token</span><span class="p">);</span>

   <span class="n">mongoc_change_stream_destroy</span> <span class="p">(</span><span class="n">stream</span><span class="p">);</span>
   <span class="n">stream</span> <span class="o">=</span> <span class="n">mongoc_collection_watch</span> <span class="p">(</span><span class="n">collection</span><span class="p">,</span> <span class="n">pipeline</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">opts</span><span class="p">);</span>
   <span class="n">mongoc_change_stream_next</span> <span class="p">(</span><span class="n">stream</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">change</span><span class="p">);</span>
   <span class="n">mongoc_change_stream_destroy</span> <span class="p">(</span><span class="n">stream</span><span class="p">);</span>
<span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
   <span class="k">if</span> <span class="p">(</span><span class="n">mongoc_change_stream_error_document</span> <span class="p">(</span><span class="n">stream</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">error</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">))</span> <span class="p">{</span>
      <span class="n">MONGOC_ERROR</span> <span class="p">(</span><span class="s">&quot;%s</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">,</span> <span class="n">error</span><span class="p">.</span><span class="n">message</span><span class="p">);</span>
   <span class="p">}</span>

   <span class="n">mongoc_change_stream_destroy</span> <span class="p">(</span><span class="n">stream</span><span class="p">);</span>
<span class="p">}</span>
</pre></div>
</div>
</div>
</div>
<div class="tabpanel-csharp" data-tabid="csharp"><p>In the example below, the <code class="docutils literal"><span class="pre">resumeToken</span></code> is retrieved from the last change stream document
and passed to the <code class="docutils literal"><span class="pre">Watch()</span></code> method as an option. Passing the <code class="docutils literal"><span class="pre">resumeToken</span></code>
to the <code class="docutils literal"><span class="pre">Watch()</span></code> method directs
the change stream to attempt to resume notifications starting after the
operation specified in the resume token.</p>
<div class="copyable-code button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-C#"><div class="highlight"><pre><span></span>  <span class="kt">var</span> <span class="n">resumeToken</span> <span class="p">=</span> <span class="n">previousCursor</span><span class="p">.</span><span class="n">GetResumeToken</span><span class="p">();</span>
  <span class="kt">var</span> <span class="n">options</span> <span class="p">=</span> <span class="k">new</span> <span class="n">ChangeStreamOptions</span> <span class="p">{</span> <span class="n">ResumeAfter</span> <span class="p">=</span> <span class="n">resumeToken</span> <span class="p">};</span>
  <span class="kt">var</span> <span class="n">cursor</span> <span class="p">=</span> <span class="n">inventory</span><span class="p">.</span><span class="n">Watch</span><span class="p">(</span><span class="n">options</span><span class="p">);</span>
  <span class="n">cursor</span><span class="p">.</span><span class="n">MoveNext</span><span class="p">();</span>
  <span class="kt">var</span> <span class="n">next</span> <span class="p">=</span> <span class="n">cursor</span><span class="p">.</span><span class="n">Current</span><span class="p">.</span><span class="n">First</span><span class="p">();</span>
  <span class="n">cursor</span><span class="p">.</span><span class="n">Dispose</span><span class="p">();</span>
</pre></div>
</div>
</div>
</div>
<div class="tabpanel-ruby" data-tabid="ruby"><p>You can use the <code class="docutils literal"><span class="pre">resume_after</span></code> modifier to resume
notifications after the operation specified in the resume
token. The <code class="docutils literal"><span class="pre">resume_after</span></code> modifier takes a value that must
resolve to a resume token, e.g. <code class="docutils literal"><span class="pre">resume_token</span></code> in the
example below.</p>
<div class="copyable-code button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-ruby"><div class="highlight"><pre><span></span>  <span class="n">change_stream</span> <span class="o">=</span> <span class="n">inventory</span><span class="o">.</span><span class="n">watch</span>
  <span class="n">cursor</span> <span class="o">=</span> <span class="n">change_stream</span><span class="o">.</span><span class="n">to_enum</span>
  <span class="n">next_change</span> <span class="o">=</span> <span class="n">cursor</span><span class="o">.</span><span class="n">next</span>
  <span class="n">resume_token</span> <span class="o">=</span> <span class="n">change_stream</span><span class="o">.</span><span class="n">resume_token</span>

  <span class="n">new_cursor</span> <span class="o">=</span> <span class="n">inventory</span><span class="o">.</span><span class="n">watch</span><span class="p">(</span><span class="o">[]</span><span class="p">,</span> <span class="ss">resume_after</span><span class="p">:</span> <span class="n">resume_token</span><span class="p">)</span><span class="o">.</span><span class="n">to_enum</span>
  <span class="n">resumed_change</span> <span class="o">=</span> <span class="n">new_cursor</span><span class="o">.</span><span class="n">next</span>
</pre></div>
</div>
</div>
</div>
<div class="tabpanel-go" data-tabid="go"><p>You can use <a class="reference external" href="https://godoc.org/go.mongodb.org/mongo-driver/mongo/options#ChangeStreamOptions.SetResumeAfter">ChangeStreamOptions.SetResumeAfter</a>
to specify the resume
token for the change stream. If the resumeAfter option is set,
the change stream resumes notifications after the operation
specified in the resume token. The <code class="docutils literal"><span class="pre">SetResumeAfter</span></code> takes a
value that must resolve to a resume token, e.g.
<code class="docutils literal"><span class="pre">resumeToken</span></code> in the example below.</p>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-go"><div class="highlight"><pre><span></span><span class="nx">resumeToken</span> <span class="o">:=</span> <span class="nx">original</span><span class="p">.</span><span class="nx">ResumeToken</span><span class="p">()</span>

<span class="nx">cs</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">coll</span><span class="p">.</span><span class="nx">Watch</span><span class="p">(</span><span class="nx">ctx</span><span class="p">,</span> <span class="nx">mongo</span><span class="p">.</span><span class="nx">Pipeline</span><span class="p">{},</span> <span class="nx">options</span><span class="p">.</span><span class="nx">ChangeStream</span><span class="p">().</span><span class="nx">SetResumeAfter</span><span class="p">(</span><span class="nx">resumeToken</span><span class="p">))</span>
<span class="nx">require</span><span class="p">.</span><span class="nx">NoError</span><span class="p">(</span><span class="nx">t</span><span class="p">,</span> <span class="nx">err</span><span class="p">)</span>
<span class="k">defer</span> <span class="nx">cs</span><span class="p">.</span><span class="nx">Close</span><span class="p">(</span><span class="nx">ctx</span><span class="p">)</span>

<span class="nx">ok</span> <span class="p">=</span> <span class="nx">cs</span><span class="p">.</span><span class="nx">Next</span><span class="p">(</span><span class="nx">ctx</span><span class="p">)</span>
<span class="nx">result</span> <span class="o">:=</span> <span class="nx">cs</span><span class="p">.</span><span class="nx">Current</span>
</pre></div>
</div>
</div>
    </div>
  </div>
</div></div>
</div>
<div class="section" id="startafter-for-change-streams">
<span id="change-stream-start-after"></span><h3><code class="docutils literal"><span class="pre">startAfter</span></code> for Change Streams<a class="headerlink" href="#startafter-for-change-streams" title="Permalink to this headline">¶</a></h3>
<div class="versionadded">
<p><span class="versionmodified">New in version 4.2.</span></p>
</div>
<p>You can start a new change stream after a specific event by passing a resume
token to <code class="docutils literal"><span class="pre">startAfter</span></code> when opening the cursor. Unlike
<a class="reference internal" href="#change-stream-resume-after"><span class="std std-ref">resumeAfter</span></a>, <code class="docutils literal"><span class="pre">startAfter</span></code> can
resume notifications after an <a class="reference internal" href="reference/change-events.html#change-event-invalidate"><span class="std std-ref">invalidate event</span></a>
by creating a new change stream. For the resume token, use the <code class="docutils literal"><span class="pre">_id</span></code> value of
the <a class="reference internal" href="reference/change-events.html#change-stream-output"><span class="std std-ref">change stream event document</span></a>. See
<a class="reference internal" href="#change-stream-resume-token"><span class="std std-ref">Resume Tokens</span></a> for more information on the resume token.</p>
<div class="admonition important">
<p class="first admonition-title">Important</p>
<ul class="last simple">
<li>The oplog must have enough history to locate the operation
associated with the token or the timestamp, if the timestamp is in
the past.</li>
</ul>
</div>
</div>
<div class="section" id="resume-tokens">
<span id="change-stream-resume-token"></span><h3>Resume Tokens<a class="headerlink" href="#resume-tokens" title="Permalink to this headline">¶</a></h3>
<p>The <code class="docutils literal"><span class="pre">_id</span></code> value of a <a class="reference internal" href="reference/change-events.html#change-stream-output"><span class="std std-ref">change stream event document</span></a> acts as the resume token:</p>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-none"><div class="highlight"><pre><span></span>{
   &quot;_data&quot; : &lt;BinData|hex string&gt;
}
</pre></div>
</div>
</div>
<p>The resume token <code class="docutils literal"><span class="pre">_data</span></code> type depends on the MongoDB versions and,
in some cases, the feature compatibility version (fcv) at the time
of the change stream’s opening/resumption (i.e. a change in fcv
value does not affect the resume tokens for already opened change
streams):</p>
<table border="1" class="colwidths-given docutils">
<colgroup>
<col width="30%" />
<col width="37%" />
<col width="33%" />
</colgroup>
<thead valign="bottom">
<tr class="row-odd"><th class="head">MongoDB Version</th>
<th class="head">Feature Compatibility Version</th>
<th class="head">Resume Token <code class="docutils literal"><span class="pre">_data</span></code> Type</th>
</tr>
</thead>
<tbody valign="top">
<tr class="row-even"><td>MongoDB 4.2 and later</td>
<td>“4.2” or “4.0”</td>
<td>Hex-encoded string (<code class="docutils literal"><span class="pre">v1</span></code>)</td>
</tr>
<tr class="row-odd"><td>MongoDB 4.0.7 and later</td>
<td>“4.0” or “3.6”</td>
<td>Hex-encoded string (<code class="docutils literal"><span class="pre">v1</span></code>)</td>
</tr>
<tr class="row-even"><td>MongoDB 4.0.6 and earlier</td>
<td>“4.0”</td>
<td>Hex-encoded string (<code class="docutils literal"><span class="pre">v0</span></code>)</td>
</tr>
<tr class="row-odd"><td>MongoDB 4.0.6 and earlier</td>
<td>“3.6”</td>
<td>BinData</td>
</tr>
<tr class="row-even"><td>MongoDB 3.6</td>
<td>“3.6”</td>
<td>BinData</td>
</tr>
</tbody>
</table>
<p>With hex-encoded string resume tokens, you can compare and sort the
resume tokens.</p>
<p>Regardless of the fcv value, a 4.0 deployment can use
either BinData resume tokens or hex string resume tokens to resume a
change stream. As such, a 4.0 deployment can use a resume
token from a change stream opened on a collection from a 3.6
deployment.</p>
<p>New resume token formats introduced in a MongoDB version
cannot be consumed by earlier MongoDB versions.</p>
<div class="admonition-tip admonition">
<p class="first admonition-title">Tip</p>
<p class="last">Starting in MongoDB 4.2, change streams will throw an exception if
the <a class="reference internal" href="#change-stream-modify-output"><span class="std std-ref">change stream aggregation pipeline</span></a> modifies an event’s <a class="reference internal" href="reference/change-events.html#change-stream-event-id"><span class="std std-ref">_id</span></a> field.</p>
</div>
</div>
</div>
<div class="section" id="use-cases">
<h2>Use Cases<a class="headerlink" href="#use-cases" title="Permalink to this headline">¶</a></h2>
<p>Change streams can benefit architectures with reliant business systems,
informing downstream systems once data changes are durable. For example,
change streams can save time for developers when implementing Extract,
Transform, and Load (ETL) services, cross-platform synchronization,
collaboration functionality, and notification services.</p>
</div>
<div class="section" id="access-control">
<h2>Access Control<a class="headerlink" href="#access-control" title="Permalink to this headline">¶</a></h2>
<p>For deployments enforcing <a class="reference internal" href="core/authentication.html#authentication"><span class="std std-ref">Authentication</span></a> and <a class="reference internal" href="core/authorization.html#authorization"><span class="std std-ref">authorization</span></a>:</p>
<ul>
<li><p class="first">To open a change stream against specific collection, applications
must have privileges that grant <a class="reference internal" href="reference/privilege-actions.html#changeStream" title="changeStream"><code class="xref mongodb mongodb-authaction docutils literal"><span class="pre">changeStream</span></code></a> and
<a class="reference internal" href="reference/privilege-actions.html#find" title="find"><code class="xref mongodb mongodb-authaction docutils literal"><span class="pre">find</span></code></a> actions on the corresponding collection.</p>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-javascript"><div class="highlight"><pre><span></span><span class="p">{</span> <span class="nx">resource</span><span class="o">:</span> <span class="p">{</span> <span class="nx">db</span><span class="o">:</span> <span class="o">&lt;</span><span class="nx">dbname</span><span class="o">&gt;</span><span class="p">,</span> <span class="nx">collection</span><span class="o">:</span> <span class="o">&lt;</span><span class="nx">collection</span><span class="o">&gt;</span> <span class="p">},</span> <span class="nx">actions</span><span class="o">:</span> <span class="p">[</span> <span class="s2">&quot;find&quot;</span><span class="p">,</span> <span class="s2">&quot;changeStream&quot;</span> <span class="p">]</span> <span class="p">}</span>
</pre></div>
</div>
</div>
</li>
<li><p class="first">To open a change stream on a single databases, applications must have
privileges that grant <a class="reference internal" href="reference/privilege-actions.html#changeStream" title="changeStream"><code class="xref mongodb mongodb-authaction docutils literal"><span class="pre">changeStream</span></code></a> and
<a class="reference internal" href="reference/privilege-actions.html#find" title="find"><code class="xref mongodb mongodb-authaction docutils literal"><span class="pre">find</span></code></a> actions on all non-<code class="docutils literal"><span class="pre">system</span></code> collections in a
database.</p>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-javascript"><div class="highlight"><pre><span></span><span class="p">{</span> <span class="nx">resource</span><span class="o">:</span> <span class="p">{</span> <span class="nx">db</span><span class="o">:</span> <span class="o">&lt;</span><span class="nx">dbname</span><span class="o">&gt;</span><span class="p">,</span> <span class="nx">collection</span><span class="o">:</span> <span class="s2">&quot;&quot;</span> <span class="p">},</span> <span class="nx">actions</span><span class="o">:</span> <span class="p">[</span> <span class="s2">&quot;find&quot;</span><span class="p">,</span> <span class="s2">&quot;changeStream&quot;</span> <span class="p">]</span> <span class="p">}</span>
</pre></div>
</div>
</div>
</li>
<li><p class="first">To open a change stream on an entire deployment, applications must
have privileges that grant <a class="reference internal" href="reference/privilege-actions.html#changeStream" title="changeStream"><code class="xref mongodb mongodb-authaction docutils literal"><span class="pre">changeStream</span></code></a> and
<a class="reference internal" href="reference/privilege-actions.html#find" title="find"><code class="xref mongodb mongodb-authaction docutils literal"><span class="pre">find</span></code></a> actions on all non-<code class="docutils literal"><span class="pre">system</span></code> collections for all
databases in the deployment.</p>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-javascript"><div class="highlight"><pre><span></span><span class="p">{</span> <span class="nx">resource</span><span class="o">:</span> <span class="p">{</span> <span class="nx">db</span><span class="o">:</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="nx">collection</span><span class="o">:</span> <span class="s2">&quot;&quot;</span> <span class="p">},</span> <span class="nx">actions</span><span class="o">:</span> <span class="p">[</span> <span class="s2">&quot;find&quot;</span><span class="p">,</span> <span class="s2">&quot;changeStream&quot;</span> <span class="p">]</span> <span class="p">}</span>
</pre></div>
</div>
</div>
</li>
</ul>
</div>
<div class="section" id="event-notification">
<h2>Event Notification<a class="headerlink" href="#event-notification" title="Permalink to this headline">¶</a></h2>
<p>Change streams only notify on data changes that have persisted to a majority
of data-bearing members in the replica set. This ensures that notifications are
triggered only by majority-committed changes that are durable in failure
scenarios.</p>
<p>For example, consider a 3-member <a class="reference internal" href="reference/glossary.html#term-replica-set"><span class="xref std std-term">replica set</span></a> with a change stream
cursor opened against the <a class="reference internal" href="reference/glossary.html#term-primary"><span class="xref std std-term">primary</span></a>. If a client issues an insert
operation, the change stream only notifies the application of the data change
once that insert has persisted to a majority of data-bearing members.</p>
<p>If an operation is associated with a <a class="reference internal" href="core/transactions.html"><span class="doc">transaction</span></a>, the change event document includes the
<code class="docutils literal"><span class="pre">txnNumber</span></code> and the <code class="docutils literal"><span class="pre">lsid</span></code>.</p>
</div>
<div class="section" id="collation">
<h2>Collation<a class="headerlink" href="#collation" title="Permalink to this headline">¶</a></h2>
<p>Starting in MongoDB 4.2, change streams use <code class="docutils literal"><span class="pre">simple</span></code> binary
comparisons unless an explicit collation is provided. In earlier
versions, change streams opened on a single collection
(<a class="reference internal" href="reference/method/db.collection.watch.html#db.collection.watch" title="db.collection.watch()"><code class="xref mongodb mongodb-method docutils literal"><span class="pre">db.collection.watch()</span></code></a>) would inherit that collection’s
default collation.</p>
<div class="toctree-wrapper compound">
</div>
</div>
</div>

                
    <div id="btnv">
      <span class="btn-arrow-left">&larr; &nbsp;</span>
      <a class="btn-prev-text" href="appendix/security/appendixC-openssl-client.html" title="Previous Section: Appendix C - OpenSSL Client Certificates for Testing"><span>Appendix C - OpenSSL Client Certificates for Testing</span></a>
      <a class="btn-next-text" href="administration/change-streams-production-recommendations.html" title="Next Section: Change Streams Production Recommendations"><span>Change Streams Production Recommendations</span></a>
      <span class="btn-arrow-right">&nbsp;&rarr;</span>
    </div>
                  <div class="footer">
                    <div class="copyright">
                      <p>&copy; MongoDB, Inc 2008-present. MongoDB, Mongo, and the leaf logo are registered trademarks of MongoDB, Inc.</p>
                    </div>
                  </div>
              </div></div>
            </div>
        </div>
    </div>
    <div class="right-column">
      <div class="wrapper"> <div id='mongodb-docs-1'>
   <script type='text/javascript'>
      googletag.cmd.push(function() { googletag.display('mongodb-docs-1'); });
   </script>
</div>
            <div class="social">
               <a class="slack-icon" href="https://slackpass.io/mongo-db?jmp=docs" title="https://slackpass.io/mongo-db?jmp=docs"><i class="fab fa-slack" aria-hidden="true"></i></a>
               <a class="twitter-icon" href="https://twitter.com/MongoDB" title="https://twitter.com/MongoDB"><i class="fab fa-twitter-square"></i></a>
               <a class="youtube-icon" href="https://www.youtube.com/user/MongoDB" title="https://www.youtube.com/user/MongoDB"><i class="fab fa-youtube-square"></i></a>
               <a class="facebook-icon" href="https://www.facebook.com/mongodb" title="https://www.facebook.com/mongodb"><i class="fab fa-facebook-square"></i></a>
               <a class="stack-overflow-icon" href="https://stackoverflow.com/tags/mongodb/info" title="https://stackoverflow.com/tags/mongodb/info"><i class="fab fa-stack-overflow" aria-hidden="true"></i></a>
            </div>
        

      </div>
    </div>
    
      <div id="rating-panel"></div>
    
    <div class="clearfix"></div>
  </div>
  

  <script type="text/javascript">
  // Bootstrap array of links that should trigger a full page reload
  window.docsExcludedNav = ['/administration', '/administration/production-checklist', '/administration/indexes-management', '/aggregation', '/applications/geospatial-indexes', '/applications/indexes', '/contributors/getting-started', '/core/2d', '/core/2dsphere', '/core/auditing', '/core/authentication', '/core/authorization', '/core/backups', '/core/read-isolation-consistency-recency', '/core/databases-and-collections', '/core/geohaystack', '/core/index-single', '/core/index-compound', '/core/index-creation', '/core/index-hashed', '/core/index-multikey', '/core/index-partial', '/core/index-sparse', '/core/index-text', '/core/index-ttl', '/core/index-unique', '/core/index-wildcard', '/core/journaling', '/core/kerberos', '/core/map-reduce', '/core/operational-segregation', '/core/query-optimization', '/core/read-preference', '/core/replica-set-architectures', '/core/replica-set-high-availability', '/core/replica-set-members', '/core/replica-set-secondary', '/core/transactions', '/geospatial-queries', '/replication', '/core/sharded-cluster-components', '/core/wiredtiger', '/core/write-operations-atomicity', '/crud', '/indexes', '/installation', '/introduction', '/mongo', '/products/bi-connector', '/reference/command', '/reference/collation', '/text-search', '/tutorial/manage-the-database-profiler', '/core/index-text', '/reference/bson-types', '/reference/configuration-options', '/reference/indexes', '/reference/method', '/reference/operator/aggregation', '/reference/operator/query', '/reference/operator/query-modifier', '/reference/operator/update', '/reference/replication', '/reference/read-concern', '/reference/security', '/reference/sharding', '/reference/write-concern', '/release-notes/2.4', '/release-notes/2.6', '/release-notes/2.8', '/release-notes/3.0', '/release-notes/3.2', '/release-notes/3.4', '/release-notes/3.6', '/release-notes/4.0', '/release-notes/4.2', '/security', '/sharding', '/changeStreams', '/core/zone-sharding', '/core/hashed-sharding', '/core/ranged-sharding', '/storage', '/tutorial/change-sharded-cluster-wiredtiger', '/tutorial/insert-documents', '/tutorial/query-documents', '/tutorial/remove-documents', '/tutorial/update-documents', '/tutorial/enable-authentication', '/tutorial/install-mongodb-on-ubuntu', '/tutorial/install-mongodb-on-windows', '/tutorial/install-mongodb-on-red-hat', '/tutorial/install-mongodb-on-debian', '/tutorial/install-mongodb-on-suse', '/tutorial/install-mongodb-on-amazon', '/tutorial/install-mongodb-enterprise-on-ubuntu', '/tutorial/install-mongodb-enterprise-on-windows', '/tutorial/install-mongodb-enterprise-on-red-hat', '/tutorial/install-mongodb-enterprise-on-debian', '/tutorial/install-mongodb-enterprise-on-suse', '/tutorial/install-mongodb-enterprise-on-amazon', '/tutorial/install-mongodb-on-os-x'];
  </script></body>
</html>